我有一个程序,我可以画两条线,当我为这些线选择起点和终点时,它计算出它们将相交的点。我想画一条线,从交点开始,正好在这两条线的中间。
我在计算两条线之间的角度,如下所示:
double angle(Line pL1, Line pL2){
double angle = Math.toDegrees(Math.atan2(pL2.p1.y - pL1.p1.y, pL2.p1.x - pL1.p1.x));
if(angle < 0){
angle += 360;
}
return angle;
}
然后生成如下新行:
double newAngle = Math.toRadians(drawAngle);
System.out.println(newAngle);
double x = pI.x + 80 * Math.sin(newAngle);
double y = pI.y + 80 * Math.cos(newAngle);
Point2D.Double endPoint = new Point2D.Double(x,y);
Line l3 = new Line(pI,endPoint);
其中pI
是交点。然而,这条线最终总是面对错误的角度,我怎么才能重写这段代码,使这条线精确地画在另外两行之间,就像上面的示例图片一样?
编辑:
产出:
发布于 2017-10-04 12:04:20
我不知道你在用这个角度做什么,但我想你想要的第二点是:
double y = 0.5*(pL2.p1.y + pL1.p1.y);
double x = 0.5*(pL2.p1.x + pL1.p1.x);
你正在计算的角度是一条线通过每条线的第一点画出的角度。似乎与此无关。
发布于 2017-10-04 12:59:31
要找到由两条线形成的角的平分线,需要计算这些线的单位方向矢量。
len1 = Sqrt((pL1.p1.y - pL1.p2.y)^2 + (pL1.p1.x - pL1.p2.x)^2)
dx1 = (pL1.p2.x - pL1.p1.x) / len1
dy1 = (pL1.p2.y - pL1.p1.y) / len1
similar for the second line
bx = (dx1 + dx2) / 2
by = (dy1 + dy2) / 2
二分线的第二点是
point.x = pI.x + 100.0 * bx
point.y = pI.y + 100.0 * by
https://stackoverflow.com/questions/46564024
复制相似问题