package org.geolab3d.geometry;
//import org.geolab3d.geometry.Plane;
import org.geolab3d.geometry.Point;
import java.lang.Math;
public class Kernel {
//costante: serve per confronti punti "same"
public static final double tol=0.00001;
//metodo che implementa la distanza tra due punti nelle tre coordinate
public static double distance(Point p1, Point p2) {
final double dinstance;
dinstance = Math.sqrt( Math.pow((p1.getX()-p2.getX()),2) + Math.pow((p1.getY()-p2.getY()),2) + Math.pow((p1.getZ()-p2.getZ()),2) );
return dinstance;
}
//metodo che calcola le coordinate del punto medio
public Point midPoint(Point p1, Point p2){
final Point p_med;
p_med=new Point(0.,0.,0.);//creo un nuovo obj di tipo point e lo inizializzo
p_med.setX((p1.getX()+p2.getX())/2);
p_med.setY((p1.getY()+p2.getY())/2);
p_med.setZ((p1.getZ()+p2.getZ())/2);
return p_med;
}
//equazione della retta passante per due punti in x, y, z: � un sistema di due eq. una in xy e l'altra in xz
//ritorna a1x+b1y+c1=0 a sistema con a2x+b2z+c2=0
public void EqLine (Point p1, Point p2){
final double a1;
final double b1;
final double c1;
final double a2;
final double b2;
final double c2;
//COEFFICIENTI DI a1X+b1Y+c1=0
a1 = p2.getY() - p1.getY();
b1 = p1.getX() - p2.getX();
c1 = (p1.getY()*p2.getX())-(p1.getX()*p2.getY());
//COEFFICIENTI DI a2X+b2Z+c2=0
a2 = p2.getZ() - p1.getZ();
b2 = p1.getX() - p2.getX();
c2 = (p1.getZ()*p2.getX())-(p1.getX()*p2.getZ());
}
//metodo che controlla se 3 punti sono allineati o meno: per tre punti passa un e un solo piano
public boolean areCollinear (Point p0, Point p1, Point p2){
final int rango;
if (Rg(p1.getX()-p0.getX(), p1.getY()-p0.getY(), p1.getZ()-p0.getZ(), p2.getX()-p0.getX(), p2.getY()-p0.getY(), p2.getZ()-p0.getZ() )==1){
return true; //se sono allineati
}else {
return false;//non sono allineati: passa un e un solo piano
}
}
//metodo che calcola il rango della matrice dei coefficienti di 2 piani 3x2
public int Rg (double a1, double b1, double c1, double a2, double b2, double c2){
final int rango;
if ( ((a1 * b2)-(b1 * a2)!=0) && ((a1 * c2)-(a2 * c1)!=0) && ( (a1*c2)- (c1*a2)!=0) ){
rango = 2;
} else{rango = 1;}
return rango;
}
}