PDA

View Full Version : Super simple angle help! =(

Awesomeness
Mar 28, 2009, 12:12 PM
Ok, I need to find the angle 'tween two points on a 2D plane. This would be the angle in comparison to vertical. For example,

This is 0 degrees

||
||
||
||
||
()

This is 45 degrees

||
|| //
|| //
|| //
||//
()

This is 90

||
||
||
||
||___________
()___________

Yeah, I'm working with Java. Could some one post the equation, the pseudo code, or Java code?

Thanks.

Catfish_Man
Mar 28, 2009, 12:21 PM
http://www.mathwords.com/s/sohcahtoa.htm

lee1210
Mar 28, 2009, 07:39 PM
I really hope this isn't homework. I made an inner class myPoint to demonstrate, i assume you already have a point class in place that you could use/extend:

public class testtrig {
public static void main(java.lang.String args[]) {
testtrig x = new testtrig();
myPoint p1 = x.new myPoint(1000.,1.);
myPoint p2 = x.new myPoint(0.,0.5);
System.out.println("The result for p1 and p2 is: " + p1.getAngleInDegreesWith(p2));

System.out.println("The result from origin of p1: " + p1.getAngleInDegreesWithOrigin());
}
public class myPoint {
double xCoor; //We'll let them default to protected, so we can act on other myPoints in methods
double yCoor;
myPoint(double x,double y) {
this.xCoor = x;
this.yCoor = y;
}

public double getX() { return xCoor;}
public double getY() { return yCoor;}

public double getSlopeWith(myPoint p) {
return (java.lang.Math.abs(p.xCoor - xCoor) / java.lang.Math.abs(p.yCoor - yCoor));
}

public double getAngleInDegreesWith(myPoint p) {
return java.lang.Math.toDegrees(java.lang.Math.atan(this.getSlopeWith(p)));
}

public double getSlopeWithOrigin() {
return xCoor/yCoor;
}

public double getAngleInDegreesWithOrigin() {
return java.lang.Math.toDegrees(java.lang.Math.atan(this.getSlopeWithOrigin()));
}
}
}

It isn't the most beautiful or best documented, but it should get you the angle in degrees. I didn't do any I/O, the main class is just to demonstrate the use of some of the functions. You would want to add error checking that the slope wasn't infinity/undefined, etc.

-Lee

Edit: I was guessing at which angle you wanted, exactly... i figured that if you were working with the origin and some point with positive x and y value the angle you'd want would be the one between the x-axis and the line segment between the two points. If that isn't what you want, it should be easy to adjust... it's all a little trig. I didn't want to calculate the line segment length for use, that's why i went with tangent. Someone might need to check my logic for negative x and y values. It's saturday.

Awesomeness
Mar 28, 2009, 08:20 PM
No, it's not homework. Thanks!