下面我已经包含了我正在处理的代码。
我需要创建一个需要3个点的类,并且可以返回边长和这些点的角度。
我在${match}/videos
方法遇到问题。我试图在那里调用三种方法computeAngles
和side2和3长度。但我有点麻烦。
尚未完成。我仍然需要获得angle1和angle3,但我想在继续之前找出角度2。
getSide1_Length
答案 0 :(得分:0)
首先,您应该重写构造函数。
p1 = p1;
我认为您要做的是将字段设置为构造函数的参数。你在那里做的是将参数放入参数。 现在有两个常见的解决方案来解决这个问题。你可以重命名你的参数或者放置一个"这个。"在左边p1。
this.p1 = p1; // this.p1 is the field | p1 is the parameter
您的 setPoint()方法也需要一些工作。您要做的是将字段设置为参数的值。您每次都要创建新对象。
this.p1 = p1; // this.p1 is the field | p1 is the parameter
您的 getSide()方法不应该使用任何参数,因为它们只是根据您存储在字段中的点返回边长。所以将它们改为:
public double getSide1_Length()
{
double side1 = Math.sqrt(((Math.pow((p2.x - p1.x), 2)) + Math.pow((p2.y - p1.y), 2)));
return side1;
}
对于 computeAngle()方法,请查看此处:https://www.mathsisfun.com/algebra/trig-solving-sss-triangles.html
根据该链接,您应该执行以下操作:
private double computeAngles()
{
double side1 = getSide1_Length(side1);
double side2 = getSide2_Length(side2);
double side3 = getSide3_Length(side3);
int angle2 = Math.acos(((Math.pow(side3,2)) + (Math.pow(side2,2)) - (Math.pow(side1,2)) / (2 * (side3 * side2))));
return angle2;
}
答案 1 :(得分:0)
我会稍微改变一下。
getSide1
,getSide2
和getSide3
:所有这些都做同样的事情,唯一的区别是计算中使用的点。因此,您应该将它们更改为单个方法,该方法可以获得2分并进行数学运算:
public double getSideLength(Point a, Point b)
{
return Math.sqrt(((Math.pow((a.x - b.x),2)) + Math.pow((a.y - b.y),2)));
}
然后,要计算角度,请注意:
private double computeAngles(double angle1, double angle2, double angle3)
这些angle
变量不与开头声明的变量相同(带有private
修饰符的变量) - check here以获取详细信息。< / p>
要正确计算角度,请调用getSideLength
3次以获取3个边的长度,然后对边进行相应的计算:
private void computeAngles() {
double side1 = getSideLength(p1, p2);
double side2 = getSideLength(p2, p3);
double side3 = getSideLength(p3, p1);
angle2 = Math.asin(((Math.pow(side3,2)) - (Math.pow(side2,2)) - (Math.pow(side1,2)) / (-2 * (side2 * side1))));
angle1 = // do the same math using the respective sides
angle3 = // do the same math using the respective sides
}
由于获得角度的数学是相同的(只有使用的边改变了),你也可以为它创建一个方法:
private double getAngle(double sideA, double sideB, double sideC) {
return Math.asin(((Math.pow(sideC, 2)) - (Math.pow(sideB, 2)) - (Math.pow(sideA, 2)) / (-2 * (sideB * sideA))));
}
然后你计算出那样的角度:
private void computeAngles() {
double side1 = getSideLength(p1, p2);
double side2 = getSideLength(p2, p3);
double side3 = getSideLength(p3, p1);
angle1 = getAngle(side1, side2, side3);
angle2 = // call getAngle changing the sides order accordingly
angle3 = // call getAngle changing the sides order accordingly
}