Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 14.08.2010, 07:36   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Геометрический вопрос

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

Последний раз редактировалось CRASHER, 14.08.2010 в 14:12.
(Offline)
 
Ответить с цитированием
Старый 14.08.2010, 16:06   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Тревога! Блитз не пашет ни в дугу!

ээ вопрос не очень понятен.
триангла который составлин из двух выше упомянутых точек.
триангл то из трёх точек составляется а не из двух.
если тебе нужно найти третью, то это уже не "спроецировать третью точку на грань", т.к. грани никакой ещё нет. имея две точки нельзя просто так найти третью, т.к. плоскость задаётся тремя)
(Offline)
 
Ответить с цитированием
Старый 14.08.2010, 16:48   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Геометрический вопрос

Не ясны исходные данные. А следовательно решения не может быть получено, пока не будут сформулированы условия
Могу предложить пару направлений:
1. Найти все треугольники, которые имеют в составе эти две вершины.
2. Из вершин каждого треугольника составить уравнение плоскости и проецировать точку на них. Возможно поможет формула определения кратчайшего расстояния от точки до плоскости.
3. Возможно стоит использовать нормаль от точки к плоскости грани для проецирования.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 14.08.2010, 18:54   #4
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Тревога! Блитз не пашет ни в дугу!

Сообщение от Mr_F_ Посмотреть сообщение
ээ вопрос не очень понятен.

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

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

А мне нужно получить точку которая была бы спроецированна на грань триангла, ну или можено выразится ближайшая точка прямой к пикнутой.
непонятно?)) я еще могу попробовать)
(Offline)
 
Ответить с цитированием
Старый 14.08.2010, 20:44   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Тревога! Блитз не пашет ни в дугу!

Сообщение от CRASHER Посмотреть сообщение
точка неиспользуется
И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.08.2010, 10:40   #6
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Тревога! Блитз не пашет ни в дугу!

Сообщение от pax Посмотреть сообщение
И как по твоему ты собираешься определить точку пересечения луча с гранью используя всего две точки треугольника?
Вот тебе чтиво (ссылка)
Я не уверен что ты меня понял, мне известны все точки, есть пикнутая точка, незнаю про какой ты луч. Мне надо, зная точку а1, узнать точку а2, причем в пространстве.

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

поняинт?)
Если хош, могу в макромедии накидать картинку.
(Offline)
 
Ответить с цитированием
Старый 15.08.2010, 15:25   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Геометрический вопрос

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

Сообщение от CRASHER Посмотреть сообщение
Я не уверен что ты меня понял
Правильно поставленный вопрос - 50% ответа
Миниатюры
Нажмите на изображение для увеличения
Название: pointOnAdge.png
Просмотров: 891
Размер:	11.7 Кб
ID:	10984  
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 15.08.2010 в 23:58.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (16.08.2010)
Старый 16.08.2010, 10:59   #8
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Геометрический вопрос

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


Правильно поставленный вопрос - 50% ответа
Теперь я точно увере что ты меня понял, но вот конечно это не совсем то. Понимаешь, ты отталкиваешься от третьей вершины, я бы хотел чтобы (ap;A) и (а1;a2) были перпендекулярны. Но впринцепе это тоже решение проблемы Потестю, может мне подойдет. Пасибки
(Offline)
 
Ответить с цитированием
Старый 16.08.2010, 11:28   #9
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Геометрический вопрос

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


Правильно поставленный вопрос - 50% ответа
Кхммм...
а как бы ты в блитзе это записал ?) аналог команде Vector3 у него есть?
(Offline)
 
Ответить с цитированием
Старый 16.08.2010, 14:02   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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 до плоскости (получил ее проекцию) и это была бы нужная точка.

В общем решений много .
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (11.12.2010)
Старый 16.08.2010, 16:31   #11
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Геометрический вопрос

Сообщение от pax Посмотреть сообщение
В общем решений много .
Решений то много а рациональное одно Благодарю за потраченное время)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com