Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [геометрия] прямая и перпендикуляр


Автор: Artemon 18.3.2008, 13:00
есть прямая, заданная координатами (Ax,Ay), (Bx,By)

Как получить координаты точки, находящейся на расстоянии L от этой прямой.
И если провести прямую через точки [(Ax,Ay), (Искомая точка)], то эта прямая будет перпендикуляром к исходной прямой.


Жесть.

Автор: Sardar 18.3.2008, 13:38
Код

a = (By-Ay) / (Bx-Ax);
b = Ay;

f(x) = a*x + b; - исходная прямая

(x, f(x)) - любая точка на прямой, то
(x + u, f(x) + v) - точка на параллельной прямой, сдвинутой от нашей на L
ang = (atan(а) [+-] pi/2) - направление, крутим в обе стороны
u = cos(ang)*L;
v = sin(ang)*L;

f(x + u) = f(x) + v; - сдвинутая в сторону на L точка, на прямой перпендикулярной f(x)

Автор: Akina 18.3.2008, 13:44
Цитата(Artemon @  18.3.2008,  14:00 Найти цитируемый пост)
Как получить координаты точки, находящейся на расстоянии L от этой прямой.

Совокупность точек, находящихся на заданном расстоянии от прямой, есть объединение двух прямых, а совсем даже не одна точка.

Автор: v2v 18.3.2008, 13:58
Цитата(Akina @  18.3.2008,  13:44 Найти цитируемый пост)
Совокупность точек, находящихся на заданном расстоянии от прямой, есть объединение двух прямых, а совсем даже не одна точка.

ух закрутил smile
ты подразумевал что на расстоянии Л относительно нашей прямой будет ещё одна прямая , а не точка?)

Автор: maxim1000 18.3.2008, 14:14
Цитата(Akina @  18.3.2008,  13:44 Найти цитируемый пост)
Совокупность точек, находящихся на заданном расстоянии от прямой, есть объединение двух прямых, а совсем даже не одна точка.

думаю, здесь просто небольшая неточность в условии:

Цитата(Artemon @  18.3.2008,  13:00 Найти цитируемый пост)
Как получить координаты точки, находящейся на расстоянии L от этой прямой.
И если провести прямую через точки [(Ax,Ay), (Искомая точка)], то эта прямая будет перпендикуляром к исходной прямой.

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

Автор: Artemon 18.3.2008, 19:05
Следуя примеру, который дал Sardar, я попробовал теорию на практике:

Ax = 1, Ay = 1
Bx = 3, By = 3

L = 1

a = (3-1) / (3-1) = 1;
b = 1;

// Попробовал в уравнение прямой подставил единичку: f(x) = 1*1+1 //f(x) = a*x + b;
// Не сраслось, получается что при x = 1, y = 2, а у нас на прямой такой точки нет.

ang = (atan(а) [+-] pi/2) - направление, крутим в обе стороны // Не пойму в каких случаях ставить -, а в каких + ?

Допустим попробовали с плюсом:
ang = atan(1)+3.14/2 = 0.785398163+1.57=2.35539816 // Надеюсь google правильно посчитал smile

u = cos(ang)*L;
v = sin(ang)*L;

u = cos(2.35539816)*1 = -0.706543467
v= sin(2.35539816)*1 = 0.707669647

f(x + u) = f(x) + v; - сдвинутая в сторону на L точка, на прямой перпендикулярной f(x)
f(1+-0.706543467) = f(1)+v  // Здесь равенство сошлось

Но что-то я не пойму, а где координаты этой точки?

Автор: cardinal 18.3.2008, 20:28
Цитата(v2v @  18.3.2008,  12:58 Найти цитируемый пост)
ты подразумевал что на расстоянии Л относительно нашей прямой будет ещё одна прямая , а не точка?)

Две прямых.

Автор: Artemon 18.3.2008, 21:22
Цитата

f(x + u) = f(x) + v; - сдвинутая в сторону на L точка, на прямой перпендикулярной f(x)

Автор: Sardar 18.3.2008, 22:08
Цитата(Artemon @  18.3.2008,  18:05 Найти цитируемый пост)
// Не сраслось, получается что при x = 1, y = 2, а у нас на прямой такой точки нет.

(Ax, Ay) взяли за базу (origin), от него и считай (т.е. (x-Ax))

Цитата(Artemon @  18.3.2008,  18:05 Найти цитируемый пост)
Не пойму в каких случаях ставить -, а в каких + ?

Представь вертикальную прямую, от неё можно отложить перпендикулярный отрезок длинной L в обе стороны, ты не указал в какую, я привёл обе.

Цитата(Artemon @  18.3.2008,  18:05 Найти цитируемый пост)
Но что-то я не пойму, а где координаты этой точки? 

Если (x, y) точка на исходной прямой, то (x+u, y+v) - искомая (сдвинутая) точка.

Автор: inside_pointer 19.3.2008, 09:49
Цитата

И если провести прямую через точки [(Ax,Ay), (Искомая точка)], то эта прямая будет перпендикуляром к исходной прямой.

  
Bx - Ax = ? (расстояние между абсциссами)
By - Ay = ? (расстояние между ординатами)

{ X1x - Ax = L 
{ X2x - X1x = (расстояние между абсциссами)

{ X1y - Ay = L
{ X2y - X1y = (расстояние между ординатами)

В итоге у тебя

{ X2x = (расстояние между абсциссами) + L + Ax
{ X2y = (расстояние между ординатами) + L + Ay

Видимо точка с координатами (X1x, X1y) выражается через Bx, By

Автор: Artemon 19.3.2008, 10:32
Цитата

Представь вертикальную прямую, от неё можно отложить перпендикулярный отрезок длинной L в обе стороны, ты не указал в какую, я привёл обе.


А если прямая идет не вертикально, а по наклону, проходя через [0,0], [3,3]

Тогда как знак определить?

Есть способ по которому можно однозначно определить знак?

Автор: shurik_catfish 21.3.2008, 12:46
Пусть (Lx,Ly) искомая точка тогда расстояние от точки а до этой точки будет
L^2=(Ax-Lx)^2+(Ay-Ly)^2    (1)
С дроугой стороны так как расстоянием от данной точки до прямой называеться длина перпендикуляра то:
скалярно AB*AL должнго быть =0
тоесть (Bx-Ax)*(Lx-Ax)+(By-Ay)*(Ly-Ay)=0   (2)
(Если Ax,Ay и Bx,By концы вектора то его координаты находяться как разность Bx-Ax , By-Ay
 или Ax-Bx , Ay-By  зависит от енго направления)
Таким образом решая систему уравнений (1)и(2) и находим координаты точки (Lx,Ly)...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)