Hallo,
ich sitze gerade bei einer Übung. Ziel ist es ein Dreieck zu berechnen mit einer Klasse Point und einer Klasse Triangel. So weit so gut. Leider komme ich bei den Winkeln nicht auf einen grünen Zweig.
Mit einem Konstruktor habe ich die Seitenlängen ausgerechnet, wollte dann über den Cosinus- und Sinussatz auf die Winkel kommen. Leider kommt da nur Schrott raus. Hier ein genauerer Blick auf meine Methode ccAngles():
Ich habe mir das noch einmal angeschaut und mathematisch dürfte hoffentlich es passen. Ist irgendetwas daran falsch wie ich Math.acos und Math.asin einsetze?
Liebe Grüße,
philipp
PS: Hier noch die zwei gesamten Klassen. Vielleicht liegt der Fehler wo anders
class Triangle
class Point
ich sitze gerade bei einer Übung. Ziel ist es ein Dreieck zu berechnen mit einer Klasse Point und einer Klasse Triangel. So weit so gut. Leider komme ich bei den Winkeln nicht auf einen grünen Zweig.
Mit einem Konstruktor habe ich die Seitenlängen ausgerechnet, wollte dann über den Cosinus- und Sinussatz auf die Winkel kommen. Leider kommt da nur Schrott raus. Hier ein genauerer Blick auf meine Methode ccAngles():
Java:
void ccAngles(double side01, double side02, double side12){
double bufferA = (Math.pow(side02, 2)+Math.pow(side01, 2)-Math.pow(side12, 2))/(2*side02*side01);
alpha=Math.acos(bufferA);
bufferA=(Math.sin(alpha)*side02)/side12;
beta= Math.asin(bufferA);
gamma= 180-(alpha+beta);
}
Liebe Grüße,
philipp
PS: Hier noch die zwei gesamten Klassen. Vielleicht liegt der Fehler wo anders
class Triangle
Java:
public class Triangle {
double side01;
double side02;
double side12;
double alpha;
double beta;
double gamma;
double sCD0;
double sCD1;
double sCD2;
Point p0;
Point p1;
Point p2;
Triangle(Point p0, Point p1, Point p2){
this.p0=p0;
this.p1=p1;
this.p2=p2;
side01= ccSide(ccDifference(p0.getX(), p1.getX()), ccDifference(p0.getY(),p1.getY())); //first we calculate the difference
side02= ccSide(ccDifference(p0.getX(), p2.getX()), ccDifference(p0.getY(), p2.getY()));//then we use pythagoras for the side
side12= ccSide(ccDifference(p1.getX(), p2.getX()), ccDifference(p1.getY(), p2.getY()));//length
ccAngles(side01, side02, side12);
}
double ccDifference(double a, double b){
return (a - b);
}
double ccSide(double a, double b){
return (Math.sqrt((Math.pow(a,2)+Math.pow(b, 2))));
}
void ccAngles(double side01, double side02, double side12){
double bufferA = (Math.pow(side02, 2)+Math.pow(side01, 2)-Math.pow(side12, 2))/(2*side02*side01);
alpha=Math.acos(bufferA);
bufferA=(Math.sin(alpha)*side02)/side12;
beta= Math.asin(bufferA);
gamma= 180-(alpha+beta);
}
double getAlpha(){
return alpha;
}
double getBeta(){
return beta;
}
double getGamma(){
return gamma;
}
boolean isEquilateral(){
boolean var;
if (side01 == side02 && side01==side12){
var = true;
}
else var=false;
return var;
}
boolean isIsosceles(){
boolean var;
if (side01 == side02 || side01 == side12){
var =true;}
else {var=false;}
return var;
}
boolean isAcute(){
boolean var;
if(alpha<=90 && beta <=90 && gamma <=90){
var = true;}
else {var = false;}
return var;
}
boolean isRight(){
boolean var;
if (alpha==90 || beta ==90 || gamma ==90){
var=true;}
else {var=false;}
return var;
}
boolean isObtuse(){
boolean var;
if (alpha >= 90 || beta >=90 || gamma >=90){
var = true;}
else {var = false;}
return var;
}
boolean isDegenerated(){
boolean var;
sCD0 = findSCD(p0.getX(), p0.getY());
sCD1 = findSCD(p1.getX(), p1.getY());
sCD2 = findSCD(p2.getX(), p2.getY());
Point p00 = new Point(p0.getX()/sCD0, p0.getY()/sCD0);
Point p10 = new Point(p1.getX()/sCD1, p1.getY()/sCD1);
Point p20= new Point(p2.getX()/sCD2, p2.getY()/sCD2);
if (p00.getX() == p10.getX() && p00.getX() == p20.getX() && p00.getY()==p10.getY() && p00.getY() == p20.getY()){
var = true;
}
else {var=false;}
return var;
}
double findSCD(double a, double b){
double sCD=Math.min(a, b);
double bigNum=Math.max(a, b);
while(bigNum%sCD==0){
sCD=sCD-1;
}
return sCD;
}
}
class Point
Java:
public class Point {
final double x;
final double y;
Point(double a, double b){
x=a;
y=b;
}
double getX(){
return x;
}
double getY(){
return y;
}
}