![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL - Стереометрия, мать ее!
grouzd[E]v © (2005-05-07 18:38:00)Доброе утро/день/вечер, вел. и уж. мастера!
У нас с делфой очередная проблема: нужно уравнение сферы (если оно вообще есть) - в курсе геометрии 7-го класса было что-то такое для 2D:
SQR(X) + SQR(Y) = SQR(R) По-моему, так...
Так вот: у меня есть камера, содержащая две точки - ОТКУДА смотрят (1) и КУДА смотрят (2). Точка (2) неподвижна, нужно сделать так чтобы точка (1) вращалась вокруг нее по окружности (радиус я высчитываю по формуле
R := SQRT( SQR(dX) + (SQR(dY) + (SQR(dZ) ), где dX, dY, dZ - разности координат между т(1) и (2)
Вы уж конесно извите что лезу с такой "технической" дрянью, но мы только еще начали проходить стереометрию - 10 класс, а мне к алгебраичке соваться неохота.
P.S.
Странно, вроде вопрос добавил, а найти не могу, так что, если повторяюсь, извините старика...
grouzd[E]v (2005-05-08 20:01:00) [1]Ааа.. Не пашет. Ну да ладно, хрен с ним - буду поворачивать или по горизонтали или по вертикали
Leon (2005-05-08 19:11:00) [2](1) от 0 до Pi ( Pi/2 если смотреть сверху)
(2) от 0 до 2*Pi
Возьми (1) произвольно :)
азимутальный - угол между осью Oz и направлением на камеру
grouzd[E]v (2005-05-08 18:54:00) [3]Дык я и спрашиваю - Как? Откуда взять угол (1)?
XProger (2005-05-08 13:40:00) [4]Делай как посоветовал Leon :)
Up вектор тоже вертеть надо, и будет он у тебя направлен по касательной к сфере.
grouzd[E]v (2005-05-08 13:10:00) [5]Делаю так:
a1 := a1 + <..>;
x0 := x*cos(a1) - z*sin(a1);
z1 := x*sin(a1) + z*cos(a1);
a2 := a2 + <..>;
y0 := y*cos(a2) - z*sin(a2);
z2 := y*sin(a2) + z*cos(a2);
x := x0;
y := y0;
z := z1 + z2;
Получается полная хрень если написать z := z1 то движется толко по горизонтали, если z := z2 - то же самое но по вертикали. А как сделать чтобы можно было одновременно по гор. и вер.?
Может надо че-то сделать с векторм up (я делаю gluLookAt)?
grouzd[E]v (2005-05-08 11:36:00) [6]TO: Leon А че за угол 1. И, если не секрет, что означает "азимутальный" - угол в градусах?
grouzd[E]v (2005-05-08 11:16:00) [7]Я БАЛБЕС!!! МОЖЕТЕ СМЕЛО ТЫКАТЬ В МЕНЯ ПАЛЬЦЕМ И НАЗЫВАТЬ ПРИДУРКОМ!!! Нужно менять не координаты, а угол и уже от него все считать как в [3] Спасибо XProger!!!
Leon (2005-05-08 11:16:00) [8]Я бы сделал так:
x = x0 + R*sin(1)*cos(2)
y = y0 + R*sin(1)*sin(2)
z = z0 + R*cos(1)
( сферическая система координат )
1,2 - азимутальный и радиальный углы
x0,y0,z0-наблюдаемая точка
чтоб крутилось - наращивай 2
parovoZZ (2005-05-07 22:39:00) [9]И чем тебя не устраивает [3]?
grouzd[E]v (2005-05-07 22:09:00) [10]Неа, расстояние известно, координаты цели тоже, найти нужно координаты 2-й точки ОТКУДА смотрят.
grouzd[E]v (2005-05-07 22:08:00) [11]Неа, расстояние известно, координаты цели тоже, найти нужно координаты 2-й точки ОТКУДА смотрят.
XProger (2005-05-07 21:31:00) [12]А вот синусы-косинусы с какого класса проходят? ;)
Поворот относительно оси Y отсчёт от оси X:
x := cos(angle)*Rad;
z := sin(angle)*Rad;
Аналогично и относительно других осей...
Если метод не устроит:
x := wx*c - wz*s;
z := wx*s + wz*c;
Но я что-то не понял вопроса. Ты поворачиваешь точку с которой смотришь, и тебе нужно определить расстояние до той точки на которую смотришь?
grouzd[E]v (2005-05-07 19:08:00) [13]Спасибо, конечно, но это - формула для диагонали параллепипеда, ее я знаю и пробовал использовать, но получается хрень, ведь при перемешении меняются 2 координаты, допустим, я поворачиваю точку (1) влево - меняются X и Z, то бишь 2 неизвесных и нужно добыть еще что-то
NE_Parovoz (2005-05-07 18:43:00) [14]R:=Sqrt(dX*dX+dY*dY+dZ*dZ);