LINUX.ORG.RU
решено ФорумTalks

[комп.графика][матан] Нарисовать нормаль и касательную

 


0

1

Есть некоторая фигура.
В этой фигуре мышкой выбирается точка, если она лежит на фигуре, проводится через эту точку нормаль и касательная.
Касательную я провел как прямую, через две соседние точки на кривой (только растянул в обе стороны).
Вопрос: как провести перпендикуляр к прямой (X1,Y1)(X2,Y2) в точке (X,Y)?

зы. Это ЕМНИП школьная математика, но я уже часа 2 не могу вспомнить/нагуглить формулу.

★★★★

Касательную я провел как прямую, через две соседние точки на кривой

а если это замкнутая кривая, например очертание овала?

как провести перпендикуляр к прямой (X1,Y1)(X2,Y2) в точке (X,Y)?

найти вектор, скалярное произведение на который даст 0

x0r ★★★★★
()

зы. Это ЕМНИП школьная математика, но я уже часа 2 не могу вспомнить/нагуглить формулу.

facepalm.png

В терминах школьной математики: Пусть уравение прямой y=kx+b. У нормали к этой прямой угловой коэффициент будет -1/k. Константа и находится из условия пересечения нормали и касательной в какой-то точке. Это ж алгебра класс за 8. Но это работает только для плоскости.

Rakot ★★
()

\vec r = \vec r_0 + t[\vec a x \vec b], t=[-\infty, \infty]

\vec a = \vec r_2 - \vec r_1

\vec b = \vec r_3 - \vec r_2

aedeph
()
Ответ на: подсказка на 1000000 от Bad_ptr

Да блин короче, для 2д случая перпендикуляр можно найти так:
есть вектор V1(x=5;y=2), перпендикулярным ему будет вектор N(nx=-y=-2;ny=x=5) а потом этот вектор нормализуй.

Bad_ptr ★★★★★
()
Ответ на: комментарий от x0r

а если это замкнутая кривая, например очертание овала?

Пример черновика кода:

//фигура - роза
//DotAlfa-  кут поворота выбраной точки
//HAG_dA - довольно малое число,
alfa_new=DotAlfa-HAG_dA;//новая точка
q=_k*sin(ROZ_N*alfa_new);
xx=q*cos(alfa_new);yy=q*sin(alfa_new);//координаты новой точки на розе

q_old=_k*sin(ROZ_N*DotAlfa);
xx_old=q_old*cos(DotAlfa);yy_old=q_old*sin(DotAlfa);//координаты старой (выбраной) точки на розе

dx=(xx-xx_old)*DOT_M;dy=(yy-yy_old)*DOT_M;//DOT_M - большое число

X2=xx-dx;Y2=yy-dy;//координаты касательной
X1=xx_old+dx;Y1=yy_old+dy;

ymuv ★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Спасибо, это то, что нужно. А про скалярное произведение векторов забыл.

ymuv ★★★★
() автор топика

Координаты касательного вектора к плоской кривой:

[1, f'(x)]

Координаты нормали

[f'(x), -1]

в заданной точке (x0, y0) строятся (восстанавливаются) два вектора по формулам выше.

unanimous ★★★★★
()

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

r2d2
()

Звиздец.

Может, имеет смысл сначала подтянуть школьную математику, а компьютерная графика пока подождёт?

Miguel ★★★★★
()
Ответ на: комментарий от r2d2

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

Уравнение есть, это роза.
Как проводилась касательная:
[комп.графика][матан] Нарисовать нормаль и касательную (комментарий)

ymuv ★★★★
() автор топика
Ответ на: комментарий от r2d2

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

А вобще ложь, гундёж и провокация

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

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

рядом с выбраной

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

aedeph
()
Ответ на: комментарий от r2d2

0.0001 (в градусах)
при 0,001 глазами уже видно что это касательная.

ymuv ★★★★
() автор топика
Ответ на: комментарий от aedeph

рядом с выбраной

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

А что не так сказал?

ymuv ★★★★
() автор топика
Ответ на: комментарий от unanimous

для параметрически заданной кривой, касательная и нормаль, соответственно будут
[x'(t), y'(t)]
[-y'(t), x'(t)]

Если у кривой есть производные по t.

pacify ★★★★★
()

Нарисовать нормаль и касательную
Вопрос: как провести перпендикуляр к прямой (X1,Y1)(X2,Y2) в точке (X,Y)?

В чём проблема?

Берёшь фломастер - и рисуешь. А ещё лучше - гелевую ручку!!

pacify ★★★★★
()
Ответ на: комментарий от aedeph

я предлагаю ангем освежить, там как раз в одном из дз, помню, было необходимо строить плоскости/прямые/касательные/нормали.
Если ТС попросит, могу поискать методику построения в учебниках за 1й курс, которые я так и не удосужился сдать.

Deleted
()
Ответ на: комментарий от Deleted

Уже вспомнил.Спасибо, пока не нужно. А учебник за 1-ый и 2-ой семестр матана нужно взять.

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

может быть смогу найти матан/ангем в электронном виде из бауманской библиотеки.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.