package org.jzy3d.maths;
/**
* An Angle2d stores three 2d points, considering the angle is on the second one.
* An instance may return angle(), cos() and sin()
* */
public class Angle2d {
/** Create an angle, described by three points.*/
public Angle2d(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3){
this.x1 = x1;
this.x2 = x2;
this.x3 = x3;
this.y1 = y1;
this.y2 = y2;
this.y3 = y3;
}
/** Create an angle, described by three coordinates.*/
public Angle2d(Coord2d p1, Coord2d p2, Coord2d p3){
x1 = p1.x;
x2 = p2.x;
x3 = p3.x;
y1 = p1.y;
y2 = p2.y;
y3 = p3.y;
}
/***********************************************************/
/** Computes the sinus of the angle, by creating a fourth point
* on an orthogonal direction.*/
public float sin(){
float x4 = 0;//(y1-y2)*(z3-z2) - (z1-z2)*(y3-y2);
float y4 = 0;//(z1-z2)*(x3-x2) - (x1-x2)*(z3-z2);
float z4 = (x1-x2)*(y3-y2) - (y1-y2)*(x3-x2);
Vector3d v1 = new Vector3d(x1, y1, 0, x2, y2, 0);
Vector3d v3 = new Vector3d(x3, y3, 0, x2, y2, 0);
Vector3d v4 = new Vector3d(x4, y4, z4, x2, y2, 0);
return ((z4>=0)?1:-1) * v4.norm() / (v1.norm()*v3.norm());
}
/** Computes cosinus of the angle*/
public float cos(){
Vector2d v1 = new Vector2d(x1, y1, x2, y2);
Vector2d v3 = new Vector2d(x3, y3, x2, y2);
return v1.dot(v3) / (v1.norm()*v3.norm());
}
/** Computes the angle at vertex p2 between vectors p1,p2 and p3,p2. Returns 0 to PI radians.*/
public float angle(){
double lenP1P3 = Math.sqrt(Math.pow(x1 - x3, 2) + Math.pow(y1 - y3, 2));
double lenP1P2 = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
double lenP3P2 = Math.sqrt(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2));
double numerator = Math.pow(lenP1P2, 2) + Math.pow(lenP3P2, 2) - Math.pow(lenP1P3, 2);
double denominator = 2 * lenP1P2 * lenP3P2;
return (float)Math.acos(numerator / denominator);
}
/***********************************************************/
private float x1;
private float x2;
private float x3;
private float y1;
private float y2;
private float y3;
}
Ads help maintain this website.