Показать сообщение отдельно
Старый 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)