Точка на линии по расстоянию до первой точки - PullRequest
2 голосов
/ 18 февраля 2012

Я хочу вычислить точку на линии по расстоянию до первой точки.Поскольку у меня нет координат новой точки, я не могу использовать линейную интерполяцию ... Я думал так: Пример рисования (Извините, я новый пользовательи я не могу публиковать изображения)

Но на самом деле это не работает, поэтому я прошу вас о помощи.

Вот фактический код в Java:

    public static PointDouble interpolationByDistance(Line l, double d) {
    double x1 = l.p1.x, x2 = l.p2.x;
    double y1 = l.p1.y, y2 = l.p2.y;
    double ratioP = ratioLine_x_To_y(l);
    double disP = l.p1.distance(l.p2);
    double ratioDis = d / disP;
    PointDouble pn = l.p2.getLocation();
    pn.multi(ratioDis);
    System.out.println("dis: " + d);
    System.out.println("new point dis: " + l.p1.distance(pn));
    return pn;
}

Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

Как программист, вы должны любить менять проблему на ту, которую вы уже решили. Найдите коэффициент и затем используйте линейную интерполяцию:

public static PointDouble interpolationByDistance(Line l, double d) {
  double len = l.p1.distance(l.p2);
  double ratio = d/len;
  double x = ratio*l.p2.x + (1.0 - ratio)*l.p1.x;
  double y = ratio*l.p2.y + (1.0 - ratio)*l.p1.y;
  System.out.println(x + ", " + y);
  ...
}
1 голос
/ 18 февраля 2012

Основы этого довольно просты:

f = 0.3;
xp = f * x1 + (1-f) * x2;
yp = f * y1 + (1-f) * y2;

Чтобы понять это, рассмотрим:

  • если f==0, то xp = x2, yp=y2
  • если f==1, то xp = x1, yp=y1
  • для любого значения f между 0..1, вы получаете точку между (x1,y1)..(x2,y2)

Я не уверен, чтоВы точно собираетесь рассчитывать.Это принимает значение f в диапазоне 0..1.Если у вас d в качестве абсолютной длины, выполните f=d/disP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...