Перпендикуляр на строке от данной точки

eTotal = ExcelTestSetOutput.Evaluate("=SUM(E:E)")
36
задан afuzzyllama 21 July 2016 в 19:09
поделиться

7 ответов

Я решил для вас уравнения:

k = ((y2-y1) * (x3-x1) - (x2-x1) * (y3-y1)) / ((y2-y1)^2 + (x2-x1)^2)
x4 = x3 - k * (y2-y1)
y4 = y3 + k * (x2-x1)

Где ^ 2 означает квадрат

64
ответ дан 27 November 2019 в 05:15
поделиться

Только ради полноты, вот решение с помощью однородных координат.

  1. гомогенные точки:

    p1 = (x1, y1,1), p2 = (x2, y2,1), p3 = (x3, y3,1)

  2. строка через две точки является их векторным произведением

    l_12: = p1 x p2 = (y1-y2, x2-x1, x1*y2 - x2*y1)

  3. расстояние (со знаком) точки к строке является их скалярным произведением.

    d: = l_12 * p3 = x3* (y1-y2) + y3* (x2-x1) + x1*y2 - x2*y1

  4. вектор от p4 до p3 является d временами вектор нормали l_12, разделенного на длину в квадрате вектора нормали.

    n2: = (y1-y2) ^2 + (x2-x1) ^2

    p4: = p3 + d/n2* (y1-y2, x2-x1, 0)

Примечание: если Вы делите l_12 на длину вектора нормали

l_12: = l_12 / sqrt ((y1-y2) ^2 + (x2-x1) ^2)

расстояние d будет евклидовым расстоянием.

0
ответ дан 27 November 2019 в 05:15
поделиться

Из wiki :

В алгебре для любого линейного уравнения y = mx + b, все перпендикуляры будут имеют уклон (-1 / м), противоположный обратная первоначальному уклону. Это полезно запомнить слоган «чтобы найти наклон перпендикуляра линию, переверните дробь и измените знак ". Напомним, что любое целое число a сам по себе над одним, и может быть написано as (a / 1)

Чтобы найти перпендикуляр к заданному линия, которая также проходит через в конкретной точке (x, y), решите уравнение y = (-1 / m) x + b, подставив при известных значениях m, x и y до решить для b.

Наклон прямой m, проходящей через (x1, y1) и (x2, y2), равен m = (y1 - y2) / (x1 - x2)

17
ответ дан 27 November 2019 в 05:15
поделиться

Вы часто обнаруживаете, что использование векторов делает решение более ясным ...

Вот процедура из моей собственной библиотеки:

public class Line2  {

Real2 from;
Real2 to;
Vector2 vector;
Vector2 unitVector = null;


    public Real2 getNearestPointOnLine(Real2 point) {
        unitVector = to.subtract(from).getUnitVector();
        Vector2 lp = new Vector2(point.subtract(this.from));
        double lambda = unitVector.dotProduct(lp);
        Real2 vv = unitVector.multiplyBy(lambda);
        return from.plus(vv);
    }

}

Вам придется реализовать Real2 ( точка), Vector2 и dotProduct (), но они должны быть простыми:

Тогда код будет выглядеть примерно так:

Point2 p1 = new Point2(x1, y1);
Point2 p2 = new Point2(x2, y2);
Point2 p3 = new Point2(x3, y3);
Line2 line = new Line2(p1, p2);
Point2 p4 = getNearestPointOnLine(p3);

Библиотека (org.xmlcml.euclid) находится по адресу: http://sourceforge.net/projects/cml/

и есть модульные тесты, которые будут проверять этот метод и показать вам, как его использовать.

@Test
public final void testGetNearestPointOnLine() {
    Real2 p = l1112.getNearestPointOnLine(new Real2(0., 0.));
    Real2Test.assertEquals("point", new Real2(0.4, -0.2), p, 0.0000001);
}
8
ответ дан 27 November 2019 в 05:15
поделиться

Вы знаете и точку, и наклон, поэтому уравнение для новой линии:

y-y3=m*(x-x3)

Поскольку прямая перпендикулярна, наклон является обратной величиной. Теперь у вас есть два уравнения, и вы можете решить их пересечение.

y-y3=-(1/m)*(x-x3)
y-y1=m*(x-x1)
7
ответ дан 27 November 2019 в 05:15
поделиться

Вычислить наклон линии, соединяющей точки (x1, y1) и (x2, y2), как m = (y2-y1) / (x2-x1)

Уравнение линии, соединяющей (x1, y1) и ( x2, y2) с использованием формы линейного уравнения точка-наклон, будет y-y2 = m (x-x2)

Наклон линии, соединяющей (x3, y3) и (x4, y4), будет - (1 / m)

Опять же, уравнение линии, соединяющей (x3, y3) и (x4, y4), с использованием формы линейного уравнения точечного наклона, будет y-y3 = - (1 / m) (x-x3)

Решите эти два линейных уравнения, решая линейное уравнение с двумя переменными, и получаемые вами значения x и y будут вашими (x4, y4)

Надеюсь, это поможет.

ура

3
ответ дан 27 November 2019 в 05:15
поделиться

Определите уклоны обоих линии, скажем, уклоны m1 и m2, тогда m1 * m2 = -1 - условие для перпендикулярность.

2
ответ дан 27 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: