forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Геометрический вопрос (http://forum.boolean.name/showthread.php?t=13133)

CRASHER 14.08.2010 07:36

Геометрический вопрос
 
Есть три точки скоординатами. Две из них лежат в основах триангла какогото сурфейса, какого то меша. Нужно спроецировать третью точку на грань триангла который составлин из двух выше упомянутых точек.
Мда, а название темы не то...

Mr_F_ 14.08.2010 16:06

Ответ: Тревога! Блитз не пашет ни в дугу!
 
ээ вопрос не очень понятен.
Цитата:

триангла который составлин из двух выше упомянутых точек.
триангл то из трёх точек составляется а не из двух.
если тебе нужно найти третью, то это уже не "спроецировать третью точку на грань", т.к. грани никакой ещё нет. имея две точки нельзя просто так найти третью, т.к. плоскость задаётся тремя)

pax 14.08.2010 16:48

Ответ: Геометрический вопрос
 
Не ясны исходные данные. А следовательно решения не может быть получено, пока не будут сформулированы условия ;)
Могу предложить пару направлений:
1. Найти все треугольники, которые имеют в составе эти две вершины.
2. Из вершин каждого треугольника составить уравнение плоскости и проецировать точку на них. Возможно поможет формула определения кратчайшего расстояния от точки до плоскости.
3. Возможно стоит использовать нормаль от точки к плоскости грани для проецирования.

CRASHER 14.08.2010 18:54

Ответ: Тревога! Блитз не пашет ни в дугу!
 
Цитата:

Сообщение от Mr_F_ (Сообщение 158357)
ээ вопрос не очень понятен.

триангл то из трёх точек составляется а не из двух.
если тебе нужно найти третью, то это уже не "спроецировать третью точку на грань", т.к. грани никакой ещё нет. имея две точки нельзя просто так найти третью, т.к. плоскость задаётся тремя)

Да нет же, известны все три точки триангла, координаты известны. Но использую я из триангла только две точки а третья(учитывая весь триангл + еще одну точку, четвертая) это точка полученная после использования CameraPick() , для наглядности >

1-ая т. 2-ая т.
|'''''''''/
| * / <--- пикнутая точка
| /
|/
точка неиспользуется

А мне нужно получить точку которая была бы спроецированна на грань триангла, ну или можено выразится ближайшая точка прямой к пикнутой.
непонятно?)) я еще могу попробовать)

pax 14.08.2010 20:44

Ответ: Тревога! Блитз не пашет ни в дугу!
 
Цитата:

Сообщение от CRASHER (Сообщение 158372)
точка неиспользуется

И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)

CRASHER 15.08.2010 10:40

Ответ: Тревога! Блитз не пашет ни в дугу!
 
Цитата:

Сообщение от pax (Сообщение 158379)
И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)

Я не уверен что ты меня понял, мне известны все точки, есть пикнутая точка, незнаю про какой ты луч. Мне надо, зная точку а1, узнать точку а2, причем в пространстве.

__.a2___
|+++++/
|++++/
| *a1/
|++/
|+/
|/

поняинт?)
Если хош, могу в макромедии накидать картинку.

pax 15.08.2010 15:25

Ответ: Геометрический вопрос
 
Вложений: 1
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).

Цитата:

Сообщение от CRASHER (Сообщение 158466)
Я не уверен что ты меня понял

Правильно поставленный вопрос - 50% ответа ;)

CRASHER 16.08.2010 10:59

Ответ: Геометрический вопрос
 
Цитата:

Сообщение от pax (Сообщение 158491)
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).


Правильно поставленный вопрос - 50% ответа ;)

Теперь я точно увере что ты меня понял, но вот конечно это не совсем то. Понимаешь, ты отталкиваешься от третьей вершины, я бы хотел чтобы (ap;A) и (а1;a2) были перпендекулярны. Но впринцепе это тоже решение проблемы :) Потестю, может мне подойдет. Пасибки ;)

CRASHER 16.08.2010 11:28

Ответ: Геометрический вопрос
 
Цитата:

Сообщение от pax (Сообщение 158491)
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).


Правильно поставленный вопрос - 50% ответа ;)

Кхммм... :)
а как бы ты в блитзе это записал ?) аналог команде Vector3 у него есть?

pax 16.08.2010 14:02

Ответ: Геометрический вопрос
 
Я синтаксис блица практически не помню, но что-то вроде:
Код:

function lerp#(a#,b#,t#)
return (1 - t#) * a# + t# * b#
end function

Type Vector3
 x# = 0
 y# = 0
 z# = 0
End Type

function lerpVector3.Vector3(a.Vector3, b.Vector3, t#)
 dim vec.Vector3
 vec\x# = lerp(a\x#, b\x#, t#)
 vec\y# = lerp(a\y#, b\y#, t#)
 vec\z# = lerp(a\z#, b\z#, t#)
 return vec
end function

А что касается перпендикуляра, то можно найти как построить уравнение прямой по двум точкам и уравнение кратчайшего расстояния от точки до прямой. Решая их можно получить точку, с перпендикулярной проекцией на грань. Уравнения эти я не помню, но они где-то есть в справочниках по высшей математике :)

UPD: Если бы у меня под рукой была математическая библиотека (для блица она даже где-то есть), то
1. Я бы, например, посчитал кватернион поворота вектора a1a2 в направлении оси 0X и повернул бы как вектор, так и точку, а затем t1 и t2 посчитал просто взяв компоненту x этих точек. И потом интерполировал
2. Например построил бы плоскость, проходящую через точку ap и перпендикулярную вектору a1a2. Потом бы нашел кратчайшее расстояние от точки a1 до плоскости (получил ее проекцию) и это была бы нужная точка.

В общем решений много ;).

CRASHER 16.08.2010 16:31

Ответ: Геометрический вопрос
 
Цитата:

Сообщение от pax (Сообщение 158582)
В общем решений много ;).

Решений то много а рациональное одно ;) Благодарю за потраченное время)


Часовой пояс GMT +4, время: 06:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot