VerticalBisector方法的结果

时间:2019-06-28 10:37:18

标签: java geometry jts

我是不熟悉Java的JTS。 我想得到线段a-b的垂直平分线。

  • 坐标a(2,3)
  • 坐标b(8,7)

我使用了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

1 个答案:

答案 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)