Результат метода perpendicularBisector - PullRequest
1 голос
/ 28 июня 2019

Я новичок в JTS с Java. Я хотел бы получить перпендикулярную биссектрису отрезка a-b.

  • координата а (2,3)
  • координата b (8,7)

Я использовал метод perpendicularBisector, но не могу понять его результат. Мне кажется, что это вообще не связано с перпендикулярным биссектрисом. Не могли бы вы объяснить смысл результата и как использовать результат для перпендикулярного биссектрисы?

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 голосов
/ 28 июня 2019

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)
...