/******************************************************************************* * Copyright 2010 Simon Mieth * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.kabeja.math; public class ParametricLine { protected Point3D startPoint; protected Vector direction; public ParametricLine(Point3D startPoint, Vector direction) { this.startPoint = startPoint; this.direction = direction; } public ParametricLine(Point3D start, Point3D end) { this.startPoint = start; this.direction = MathUtils.getVector(start, end); } public ParametricLine() { this(new Point3D(), new Point3D()); } public double getIntersectionParameter(ParametricLine line) { Vector n = MathUtils.crossProduct(this.direction, line.getDirectionVector()); if (MathUtils.absoluteValue(n) == 0.0) { //System.out.println("parallel"); return Double.POSITIVE_INFINITY; } Vector m = MathUtils.crossProduct(MathUtils.getVector(this.startPoint, line.getStartPoint()), line.getDirectionVector()); double s = 0; if (n.getX() != 0.0) { s = m.getX() / n.getX(); } else if (n.getY() != 0.0) { s = m.getY() / n.getY(); } else if (n.getZ() != 0.0) { s = m.getZ() / n.getZ(); } return s; } public Point3D getStartPoint() { return this.startPoint; } public void setStartPoint(Point3D start) { this.startPoint = start; } public Vector getDirectionVector() { return this.direction; } public void setDirectionVector(Vector v) { this.direction = v; } public Point3D getPointAt(double para) { return MathUtils.getPointOfStraightLine(this.startPoint, this.direction, para); } public double getParameter(Point3D p) { double t = 0; if (this.direction.getX() != 0) { t = (p.getX() - this.startPoint.getX()) / this.direction.getX(); } else if (this.direction.getY() != 0.0) { t = (p.getY() - this.startPoint.getY()) / this.direction.getY(); } else if (this.direction.getZ() != 0.0) { t = (p.getZ() - this.startPoint.getZ()) / this.direction.getZ(); } return t; } }