我是不熟悉Java的JTS。 我想得到线段a-b的垂直平分线。
我使用了verticalBisector方法,但无法理解其结果。 对我来说,似乎它根本与垂直平分线无关。 您能解释一下结果的含义以及如何将结果用于垂直平分线吗?
package Sui;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Triangle;
import com.vividsolutions.jts.algorithm.HCoordinate;
import com.vividsolutions.jts.algorithm.NotRepresentableException;
public class Suitwo {
public static void main (String[] args) {
System.out.println("");
Suitwo main = new Suitwo();
main.testCalcCoord();
}
public void testCalcCoord() {
Coordinate[] coords = {new Coordinate(2, 3),
new Coordinate(8, 7),
new Coordinate(0, 0)};
Triangle tri = new Triangle(coords[0],coords[1],coords[2]);
HCoordinate hcoord = tri.perpendicularBisector(coords[0],coords[1]);
Coordinate calccord = new Coordinate();
double x = 0.0;
double y = 0.0;
try {
calccord = hcoord.getCoordinate();
x = hcoord.getX();
y = hcoord.getY();
} catch (NotRepresentableException e) {
System.out.println("NotRepresentableException");
System.exit(1);
}
System.out.print("calccord:");
System.out.println(calccord);
System.out.print("X:");
System.out.println(x);
System.out.print("Y:");
System.out.println(y);
}
}
calccord:(-0.12,-0.08,NaN)
X:-0.12
Y:-0.08
答案 0 :(得分:0)
您感兴趣的是hcoord
。它是x, y, w
的结构,如果满足,则点p
在行上
hcoord.x * p.x + hcoord.y * p.y + hcoord.w = 0
(hcoord.x, hcoord.y)
部分描述了该行的法线。 hcoord.w
描述线到原点的距离,并按法线的反长度来缩放。
如果您知道直线上一个点的坐标之一,而又想知道另一个坐标,则只需重新排列以上公式即可:
p.x = (-hcoord.w - hcoord.y * p.y) / hcoord.x
p.y = (-hcoord.w - hcoord.x * p.x) / hcoord.y
如果线是水平或垂直,请注意除以零。
相反,如果您希望平分线为参数形式(点p
和方向d
),则可以使用:
p1, p2 = the points of the line segments for which to calculate the bisector
p = 0.5 * (p1 + p2)
d = (p2.y - p1.y, p1.x - p2.x)