|
14.08.2010, 07:36
|
#1
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Геометрический вопрос
Есть три точки скоординатами. Две из них лежат в основах триангла какогото сурфейса, какого то меша. Нужно спроецировать третью точку на грань триангла который составлин из двух выше упомянутых точек.
Мда, а название темы не то...
Последний раз редактировалось CRASHER, 14.08.2010 в 14:12.
|
(Offline)
|
|
14.08.2010, 16:06
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Тревога! Блитз не пашет ни в дугу!
ээ вопрос не очень понятен.
триангла который составлин из двух выше упомянутых точек.
|
триангл то из трёх точек составляется а не из двух.
если тебе нужно найти третью, то это уже не "спроецировать третью точку на грань", т.к. грани никакой ещё нет. имея две точки нельзя просто так найти третью, т.к. плоскость задаётся тремя)
|
(Offline)
|
|
14.08.2010, 16:48
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Геометрический вопрос
Не ясны исходные данные. А следовательно решения не может быть получено, пока не будут сформулированы условия
Могу предложить пару направлений:
1. Найти все треугольники, которые имеют в составе эти две вершины.
2. Из вершин каждого треугольника составить уравнение плоскости и проецировать точку на них. Возможно поможет формула определения кратчайшего расстояния от точки до плоскости.
3. Возможно стоит использовать нормаль от точки к плоскости грани для проецирования.
|
(Offline)
|
|
14.08.2010, 18:54
|
#4
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Тревога! Блитз не пашет ни в дугу!
Сообщение от Mr_F_
ээ вопрос не очень понятен.
триангл то из трёх точек составляется а не из двух.
если тебе нужно найти третью, то это уже не "спроецировать третью точку на грань", т.к. грани никакой ещё нет. имея две точки нельзя просто так найти третью, т.к. плоскость задаётся тремя)
|
Да нет же, известны все три точки триангла, координаты известны. Но использую я из триангла только две точки а третья(учитывая весь триангл + еще одну точку, четвертая) это точка полученная после использования CameraPick() , для наглядности >
1-ая т. 2-ая т.
|'''''''''/
| * / <--- пикнутая точка
| /
|/
точка неиспользуется
А мне нужно получить точку которая была бы спроецированна на грань триангла, ну или можено выразится ближайшая точка прямой к пикнутой.
непонятно?)) я еще могу попробовать)
|
(Offline)
|
|
14.08.2010, 20:44
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Тревога! Блитз не пашет ни в дугу!
Сообщение от CRASHER
точка неиспользуется
|
И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)
|
(Offline)
|
|
15.08.2010, 10:40
|
#6
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Тревога! Блитз не пашет ни в дугу!
Сообщение от pax
И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)
|
Я не уверен что ты меня понял, мне известны все точки, есть пикнутая точка, незнаю про какой ты луч. Мне надо, зная точку а1, узнать точку а2, причем в пространстве.
__.a2___
|+++++/
|++++/
| *a1/
|++/
|+/
|/
поняинт?)
Если хош, могу в макромедии накидать картинку.
|
(Offline)
|
|
15.08.2010, 15:25
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Геометрический вопрос
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).
Сообщение от CRASHER
Я не уверен что ты меня понял
|
Правильно поставленный вопрос - 50% ответа
Последний раз редактировалось pax, 15.08.2010 в 23:58.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.08.2010, 10:59
|
#8
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Геометрический вопрос
Сообщение от pax
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).
Правильно поставленный вопрос - 50% ответа
|
Теперь я точно увере что ты меня понял, но вот конечно это не совсем то. Понимаешь, ты отталкиваешься от третьей вершины, я бы хотел чтобы (ap;A) и (а1;a2) были перпендекулярны. Но впринцепе это тоже решение проблемы Потестю, может мне подойдет. Пасибки
|
(Offline)
|
|
16.08.2010, 11:28
|
#9
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Геометрический вопрос
Сообщение от pax
Если все точки известны, то я бы попробовал интерполировать по углам между векторами (в приложении картинка).
Правильно поставленный вопрос - 50% ответа
|
Кхммм...
а как бы ты в блитзе это записал ?) аналог команде Vector3 у него есть?
|
(Offline)
|
|
16.08.2010, 14:02
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Геометрический вопрос
Я синтаксис блица практически не помню, но что-то вроде:
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 до плоскости (получил ее проекцию) и это была бы нужная точка.
В общем решений много .
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.08.2010, 16:31
|
#11
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Геометрический вопрос
Сообщение от pax
В общем решений много .
|
Решений то много а рациональное одно Благодарю за потраченное время)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:17.
|