/* This file is part of the source code for 3D-XplorMath-J, Version 1.0 (January 2008).
* Copyright (c) 2008 The 3D-XplorMath Consortium (http://3d-xplormath.org).
* This source code is released under a BSD License, which allows redistribution
* in source and binary form, with or without modification, provided copyright
* and license information are included, and with no warranty or guarantee of
* any kind. For details, see http://3d-xplormath.org/j/source/BSDLicense.txt
*/
package vmm3d.core;
import java.awt.geom.Point2D;
/**
* The class LinearAlgebra provides more methods to the class Point2D
* @author karcher
*/
public class LinearAlgebra{
/**
* public Point2D minus2D(Point2D P2, Point2D P1) returns a new object with value (P2 - P1).
*/
public static Point2D minus2D(Point2D P2, Point2D P1){
Point2D D = new Point2D.Double();
D.setLocation(P2.getX() - P1.getX(), P2.getY() - P1.getY());
return D;
}
/**
* public void assignMinus2D(Point2D P2, Point2D P1) assigns to P2 the value (P2 - P1).
*/
public static void assignMinus2D(Point2D P2, Point2D P1){
P2.setLocation(P2.getX() - P1.getX(), P2.getY() - P1.getY());
}
/**
* public Point2D convexCombination(double t, Point2D P1, Point2D P2) returns a new object
* with value P1 + t*(P2-P1).
*/
public static Point2D convexCombination(double t, Point2D P1, Point2D P2){
Point2D D = new Point2D.Double();
D.setLocation( (1-t)*P1.getX() + t*P2.getX(), (1-t)*P1.getY() + t*P2.getY());
return D;
}
/**
* public Point2D convexCombination(double t1, double t2, Point2D P1, Point2D P2) returns a
* new object with value (t1*P1 + t2*P2).
*/
public static Point2D linearCombination(double t1, double t2, Point2D P1, Point2D P2){
Point2D D = new Point2D.Double();
D.setLocation( t1*P1.getX() + t2*P2.getX(), t1*P1.getY() + t2*P2.getY());
return D;
}
/**
* public Point2D normalTo(Point2D P) returns new object N = (P.y, -P.x).
*/
public static Point2D normalTo(Point2D P){
Point2D N = new Point2D.Double();
N.setLocation(P.getY(),-P.getX());
return N;
}
/**
* public Point2D normalTo(Point2D P2, Point2D P1) = normalTo(minus2D(P2,P1)).
*/
public static Point2D normalTo(Point2D P2, Point2D P1){
Point2D N = new Point2D.Double();
N.setLocation(P2.getY() - P1.getY(), -P2.getX() + P1.getX());
return N;
}
/**
* public double dotProduct(Point2D P, Point2D Q) returns (P.x*Q.x + P.y*Q.y).
*/
public static double dotProduct(Point2D P, Point2D Q){
return P.getX()*Q.getX() + P.getY()*Q.getY();
}
/**
* public double determinant(Point2D P, Point2D Q) returns (P.x*Q.y - P.y*Q.x).
*/
public double determinant(Point2D P, Point2D Q){
return P.getX()*Q.getY() - P.getY()*Q.getX();
}
/**
* public Point2D intersectTwoLines(Point2D P1, Point2D P2, Point2D Q1, Point2D Q2)
* returns the intersection point of P1 + s(P2 - P1) and Q1 + t(Q2 - Q1).
* Creates the return Point2D.
*/
public static Point2D intersectTwoLines(Point2D P1, Point2D P2, Point2D Q1, Point2D Q2) {
double s,nn;
Point2D A,N;
assignMinus2D(P2, P1); A = P2;
assignMinus2D(Q2, Q1); N = Q2;
nn = dotProduct(A,N);
s = ( N.getX()*(Q1.getX() - P1.getX()) + N.getY()*(Q1.getY() - P1.getY()) )/nn;
return convexCombination(s, P1, P2);
}
/**
* public Point2D intersectTwoLines(double P1x, double P1y, double P2x, double P2y,
* double Q1x, double Q1y, double Q2x, double Q2y)
* returns the intersection point of P1 + s(P2 - P1) and Q1 + t(Q2 - Q1), where
* these four points are given by their double coordinates.
* Creates the return Point2D.
*/
public static Point2D intersectTwoLines(double P1x, double P1y, double P2x, double P2y,
double Q1x, double Q1y, double Q2x, double Q2y) {
double s,nn;
Point2D A = new Point2D.Double( P2x-P1x, P2y-P1y);
Point2D N = new Point2D.Double(-Q2y+Q1y, Q2x-Q1x);
nn = dotProduct(A,N);
s = ( N.getX()*(Q1x - P1x) + N.getY()*(Q1y - P1y) )/nn;
A.setLocation(P1x +s*(P2x-P1x), P1y +s*(P2y-P1y));
return A;
}
}
Ads help maintain this website.