Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

GLScene.VectorGeometry Помогите понять какая функция чего делает?   Найти похожие ветки 

 
Geoms   (2005-11-01 02:34) [0]

Есть такой модуль в GLScene со множеством полезных 3Д функций. Но понять какая чего делает давольно сложно. Хоть бы перевёл его кто нибудь что ли, а? Или может кто поможет найти там следующие функции?

1) Нахождения угла между двумя векторами. В градусах или радианах.
2) Нахождения отрезка соединяющего точку с другим отрезком кратчайшим образом.
3) Нахождения вектора соединяющего два отрезка кратчайшим образом.


 
MBo ©   (2005-11-01 05:44) [1]

Про тот модуль ничего сказать не могу.

1) Через скалярное произведение векторов
2) http://algolist.manual.ru/maths/geom/distance/
3) Общий перпендикуляр к двум отрезкам, либо соединение с концом одного или концов обоих отрезков, если перпендикуляр падает на прямые вне отрезков


 
Geoms   (2005-11-01 06:16) [2]


> MBo ©   (01.11.05 05:44) [1]
>
> Про тот модуль ничего сказать не могу.
>
> 1) Через скалярное произведение векторов


А функция то как называется? Или как хоть скалярное по английски?


> 2) http://algolist.manual.ru/maths/geom/distance/


Речь о библиотеке GLScene.VectorGeometry , а не об изобретении нового велосипеда.


> 3) Общий перпендикуляр к двум отрезкам


Теперь только нам осталось отыскать подходящую функцию ...


 
MBo ©   (2005-11-01 06:28) [3]

>Или как хоть скалярное по английски?

Dot, DotProduct.

P.S. Скалярное произведение векторов изучается в средней школе


 
Geoms   (2005-11-01 06:42) [4]

Для тех у кого не стоит GLScnene, вот этот модуль : http://cvs.sourceforge.net/viewcvs.py/glscene/Source/Base/VectorGeometry.pas?rev=1.35.2.4&view=markup


 
Geoms   (2005-11-01 06:46) [5]


> MBo ©   (01.11.05 06:28) [3]
> Dot, DotProduct.


Нашёл !
{: Calculates the dot product between V1 and V2.<p>
  Result:=V1[X] * V2[X] + V1[Y] * V2[Y] + V1[Z] * V2[Z] }
function VectorDotProduct(const V1, V2 : TAffineVector) : Single; overload;


Только это, что то не похоже на угол между векторами.


> P.S. Скалярное произведение векторов изучается в средней
> школе


А ещё в школе изучаются ароматические углеводороды. Слабо написать формулу не подглядывая в Гугль? А восстанив Спартака в каком году было?

Вот тота.


 
MBo ©   (2005-11-01 07:07) [6]

>Только это, что то не похоже на угол между векторами.
Cos(fi) = Dot(a,b)/(|a|*|b|)
в знаменателе - модули векторов

>Вот тота.
;) Не слабо. И про восстание тоже. (Мы из Джаза смотрел ;)))


 
Geoms   (2005-11-01 07:15) [7]


> MBo ©   (01.11.05 07:07) [6]
>
> >Только это, что то не похоже на угол между векторами.
> Cos(fi) = Dot(a,b)/(|a|*|b|)
> в знаменателе - модули векторов


Вот эта функция значит :
{: Calculates the cosine of the angle between Vector1 and Vector2.<p>
  Result = DotProduct(V1, V2) / (Length(V1) * Length(V2)) }
function VectorAngleCosine(const V1, V2: TAffineVector) : Single;

// VectorAngleCosine
//
function VectorAngleCosine(const V1, V2: TAffineVector): Single;
// EAX contains address of Vector1
// EDX contains address of Vector2
{$ifndef GEOMETRY_NO_ASM}
asm
     FLD DWORD PTR [EAX]           // V1[0]
     FLD ST                        // double V1[0]
     FMUL ST, ST                   // V1[0]^2 (prep. for divisor)
     FLD DWORD PTR [EDX]           // V2[0]
     FMUL ST(2), ST                // ST(2):=V1[0] * V2[0]
     FMUL ST, ST                   // V2[0]^2 (prep. for divisor)
     FLD DWORD PTR [EAX + 4]       // V1[1]
     FLD ST                        // double V1[1]
     FMUL ST, ST                   // ST(0):=V1[1]^2
     FADDP ST(3), ST               // ST(2):=V1[0]^2 + V1[1] *  * 2
     FLD DWORD PTR [EDX + 4]       // V2[1]
     FMUL ST(1), ST                // ST(1):=V1[1] * V2[1]
     FMUL ST, ST                   // ST(0):=V2[1]^2
     FADDP ST(2), ST               // ST(1):=V2[0]^2 + V2[1]^2
     FADDP ST(3), ST               // ST(2):=V1[0] * V2[0] + V1[1] * V2[1]
     FLD DWORD PTR [EAX + 8]       // load V2[1]
     FLD ST                        // same calcs go here
     FMUL ST, ST                   // (compare above)
     FADDP ST(3), ST
     FLD DWORD PTR [EDX + 8]
     FMUL ST(1), ST
     FMUL ST, ST
     FADDP ST(2), ST
     FADDP ST(3), ST
     FMULP                         // ST(0):=(V1[0]^2 + V1[1]^2 + V1[2]) *
                                   //          (V2[0]^2 + V2[1]^2 + V2[2])
     FSQRT                         // sqrt(ST(0))
     FDIVP                         // ST(0):=Result:=ST(1) / ST(0)
 // the result is expected in ST(0), if it"s invalid, an error is raised
{$else}
begin
  Result:=VectorDotProduct(V1, V2)/(VectorLength(V1)*VectorLength(V2));
{$endif}
end;


Правильно ?

Теперь как вычислять пунты 2) и 3) ?


 
MBo ©   (2005-11-01 07:54) [8]

2) -  я ссылку дал

3) - я делал след. функцию для вычисления расстояния между скрещивающимися прямыми, заданных базовой точкой и единичным направляющим вектором. Для отрезков нужно доработать. Можно не единичный направляющий вектор брать, а с длиной отрезков, тогда параметры s и t в пределах 0..1 означают, что ближайшие точки находятся в пределах отрезков



 TLine3D = record
   Base: TPoint3D;
   Dir: TPoint3D;
 end;

function LineLineDistance(const L0, L1: TLine3D; var s, t: Double): Double;
var
 u: TPoint3D;
 a, b, c, d, e, det: Double;
begin
 u := VecDiff(L1.Base, L0.Base);
 a := Dot(L0.Dir, L0.Dir);
 b := Dot(L0.Dir, L1.Dir);
 c := Dot(L1.Dir, L1.Dir);
 d := Dot(L0.Dir, u);
 e := Dot(L1.Dir, u);
 det := a * c - b * b;
 if det < eps then
   Result := -1
 else begin
   det := 1 / det;
   s := det * (b * e - c * d);
   t := det * (a * e - b * d);
   Result := Distance(PointAtParam(L0, s), PointAtParam(L1, t));
 end;
end;



 
Fosgen   (2005-11-01 20:10) [9]

Господин Geoms, смею Вам заметить, что модуль VectorGeometry, не должен соответствовать ВСЕМ Вашим запросам, на ВСЕ ВАШИ случаи жизни. Таким образом, как уже приведено в примерах господином MBo, делаются СВОИ функции для вычисления тех параметров, что нужны лично Вам.
Сл-но незачем искать в модуле любую пришедшую Вам на ум функцию.

PS: "Не ищи черную кошку в темной комнате, особенно если ее там нет." (Конфуций).


 
Geoms   (2005-11-02 03:07) [10]


> Fosgen   (01.11.05 20:10) [9]
> Сл-но незачем искать в модуле любую пришедшую Вам на ум
> функцию.


Функция стандартная.


> PS: "Не ищи черную кошку в темной комнате, особенно если
> ее там нет." (Конфуций).


Не Конфуций, а "Место встречи изменить нельзя".


 
Geoms   (2005-11-02 03:59) [11]

Вот ещё вопрос по веторам. Чего то не соображу :

Есть точка и вектор. Вектор задан начальной и конечной точками. Как узнать, этот вектор закручивается по часовой стрелке вокруг точки, или против ?
Это в 2D.


 
MBo ©   (2005-11-02 07:36) [12]

>Geoms   (02.11.05 03:59) [11]

Вопрос большого смысла не имеет.
Определить, угол меньше или больше Pi, т.е. слева или справа от луча, содержащего вектор, находится точка, поможет знак векторного произведения (Cross) данного вектора и вектора нач. точка вектора-данная точка


 
Geoms   (2005-11-03 02:03) [13]


> MBo ©   (02.11.05 07:36) [12]
>
> >Geoms   (02.11.05 03:59) [11]
>
> Вопрос большого смысла не имеет.
> Определить, угол меньше или больше Pi, т.е. слева или справа
> от луча, содержащего вектор, находится точка, поможет знак
> векторного произведения (Cross) данного вектора и вектора
> нач. точка вектора-данная точка


А если точка и находится в начальной точке и вектора нет ?


 
MBo ©   (2005-11-03 07:46) [14]

>А если точка и находится в начальной точке и вектора нет ?

?


 
Geoms   (2005-11-04 02:12) [15]


> MBo ©   (03.11.05 07:46) [14]
> ?


Чего "?" Как найти то ?


 
Fosgen   (2005-11-04 10:32) [16]

Еще раз...
Господин Geoms, точнее формулируйте Ваши вопросы.

"А если точка и находится в начальной точке и вектора нет ?"

Как это вопрос понимать? Как отсутствие вектора? Тогда где находится точка? В начальной точке чего?

Вы еще не запутались? Вот то-то и оно... Поэтому Вам и ответили "?". Потому как смысл Вашего последнего вопроса совершенно неясен.

А насчет "черной кошки" - лучше изучайте ПЕРВОисточники... А то только фильмы и смотрим...

Насчет "закрученного" вектора - вопрос уже я так понимаю к динамической ситуации относится? Тогда надо определять вектор зрения и оттуда уже брать относительное понятие "по часовой стрелке или против"... А то - я одной стороны - против, с другой - по...

>Функция стандартная.

Как выясняется "стандартной" функции для вычисления расстояния между прямыми - нет. Люди делают самостоятельно. Вам рекомендую - либо последовать их примеру, либо взять те примеры, которые Вам были приведены.

А еще могу порекомендовать скачать небольшой (относительно) chm-файл к ГЛС, там более-менее есть ответ на Ваш главный вопрос - какая функция в модуле VectorGeometry за что отвечает. А то на форуме этого Вам стопроцентно никто не сделает.


 
DeadMeat ©   (2005-11-04 11:01) [17]

Кен просто привык брать сразу все готовое... Но ведь не всегда есть все что нужно. Приходится и самому работать.

---
...Death Is Only The Begining...


 
Fosgen   (2005-11-04 11:11) [18]

2 DeadMeat:
Что-то последнее время много таких стало... Что не может не настораживать...


 
Geoms   (2005-11-05 03:36) [19]


> Fosgen   (04.11.05 10:32) [16]
> Насчет "закрученного" вектора - вопрос уже я так понимаю
> к динамической ситуации относится? Тогда надо определять
> вектор зрения и оттуда уже брать относительное понятие "по
> часовой стрелке или против"... А то - я одной стороны -
> против, с другой - по...

В том то и дело, что про вектор зрения пока никто из дающих советы ничего и не сказал. Вот и спрашивается, чтож они советуют то тогда ? Получается вводят людей в заблуждение ?


> Как выясняется "стандартной" функции для вычисления расстояния
> между прямыми - нет.

Если вы это утверждаете, то докажите, что её нет в VectorGeometry, в частности тем, кто её там уже нашёл .


> А еще могу порекомендовать скачать небольшой (относительно)
> chm-файл к ГЛС

Где он ?


 
Fosgen   (2005-11-05 21:08) [20]

В том то и дело, что про вектор зрения пока никто из дающих советы ничего и не сказал. Вот и спрашивается, чтож они советуют то тогда ? Получается вводят людей в заблуждение ?

Как заданы вопросы - такие и получены ответы...

Если вы это утверждаете, то докажите, что её нет в VectorGeometry, в частности тем, кто её там уже нашёл .

Ну если Вы решили, что данный модуль - общемировой стандарт, что ж... Это Ваше право, но принимайте и последствия своего решения...

chm-файл к ГЛС


Поисковые системы, а также сайты по ГЛС никто не отменял...


 
Geoms   (2005-11-06 05:38) [21]


> Fosgen   (05.11.05 21:08) [20]
> Ну если Вы решили, что данный модуль - общемировой стандарт,
>  что ж...


Может предложить лучший - предложите.


> Поисковые системы, а также сайты по ГЛС никто не отменял.


То есть вы сами не знаете где.


 
Geoms   (2005-11-06 05:44) [22]

В этом модуле хорошо то, что многие функции написаны на ассемблере, и поэтому работают быстро.

Кстати, хочу там найти такую функцию которая можеть сдвинуть точку A к точке B на расстояние H. Я знаю как это сделать. Я просто хочу быструю функцию найти.


 
Игорь Шевченко ©   (2005-11-07 17:24) [23]


> То есть вы сами не знаете где.


И больше того, не обязаны :)


 
Fosgen   (2005-11-07 21:34) [24]

www.glscene.org
www.glscene.ru

Специально для недоступных и ленивых...


 
Банальности   (2005-11-08 05:53) [25]


> Fosgen   (07.11.05 21:34) [24]
>
> www.glscene.org
> www.glscene.ru
>
> Специально для недоступных и ленивых...


Это все знают.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.01 c
2-1148844071
wsih
2006-05-28 23:21
2006.06.18
image:=TImage.Create(Application);


8-1137160063
asd
2006-01-13 16:47
2006.06.18
Картинки gif


2-1149079022
сашки
2006-05-31 16:37
2006.06.18
ввод функций через строку


15-1148261306
GoreStudent
2006-05-22 05:28
2006.06.18
access


4-1143037786
Arazel
2006-03-22 17:29
2006.06.18
ListBox под WinApi это не проблема! А вот со скинами это слабо!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский