forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Движение точки в системе координат (http://forum.boolean.name/showthread.php?t=17297)

Izunad 22.09.2012 22:17

Движение точки в системе координат
 

Известны углы по осям XYZ Двигаем точку на растояние R как найти координаты подвинутой точки? (Расчет по полярной системе не подходит, ибо в нем используется именно полярные углы)

jimon 22.09.2012 22:40

Ответ: Движение точки в системе координат
 
проецируем вектор R на каждую ось отдельно строя в голове прямоугольный прямоугольник между вектором и осью, получаем вектор A, добавляем вектор A к позиции точки, всё

dsd 22.09.2012 22:46

Ответ: Движение точки в системе координат
 

Izunad 22.09.2012 22:46

Ответ: Движение точки в системе координат
 
Окей с одним вопросом разобрался, вроде было несложно.
Код:

Procedure MoveEntity(Entity,Move.f) ;Только для движения вперед, т.е в моей программе больше не требуется
  AngleX.f=УголХ Объекта
  AngleY.f=УголУ Объекта

  DX.f=-Move*Sin(Angley)*Cos(Anglex)
  DY.f=-Move*Sin(Anglex)
  DZ.f=Move*Cos(Angley)*Cos(Anglex)
EndProcedure

Проверял с Ксорсом, работают как часики
Теперь возникла очередная сложность, это команда TurnEntity(Entity,TurnX,TurnY,TurnZ) -Поворот объекта
Тупо приплюсовывать к углу угол не получится ибо оси смещаются по какойто зависимости.

Izunad 24.09.2012 17:16

Ответ: Движение точки в системе координат
 
в Векипедии нарыл Ссылка но от увиденного захотелось просто застрелится. Видимо не стоило пропускать уроки алгебры :)

dsd 24.09.2012 17:29

Ответ: Движение точки в системе координат
 
Цитата:

Сообщение от Izunad (Сообщение 239059)
в Векипедии нарыл Ссылка но от увиденного захотелось просто застрелится. Видимо не стоило пропускать уроки алгебры :)

xTForm, xTFormPoint, xTFormVector тебе в помощь они делают именно то что тебе нужно, а именно переводят точку из одних координат в другие и т.д. А чтобы не стреляться попробуй про поворот осей почитать, это тоже самое но проще описывается доступно для школьников, без всяких там страшных слов и символов.

ну и это пригодится наверно: http://habrahabr.ru/post/131931/

Izunad 26.09.2012 17:26

Ответ: Движение точки в системе координат
 
По общему представлению точка образует три оси относительно которых можно совершить поворот точки, т.е поворачиваются только оси точки сама точка неподвижна.
Дальше мое представление об осях кажется мне немного неправильной, а именно то что каждая ось несет в себе два значения широту и долготу, два угла с помощью которых можно полноценно определить направление оси в 3х мерном пространстве.
Я пытаюсь повернув точку вокруг 1ой оси вычислить направления двух других(т.е. их широту и долготу).

Подозреваю что есть куда более внятное представления об осях.

dsd 26.09.2012 18:33

Ответ: Движение точки в системе координат
 
Попробуй в этом направлении копать:
Как перевести вектор из одного базиса в другой?

а вообще на блитце я вот так поворачивал и все работало:
Код:


Function VectorRoller(selectedmesh,alfa#,beta#,gama#)

surf=GetSurface(selectedmesh,1)
qverts=CountVertices (surf)

For i=0 To qverts-1

;for simulation rotateentity
;x0#=saveddata#(i,0)
;y0#=saveddata#(i,1)
;z0#=saveddata#(i,2)

;for simulation turnentity
x0#=VertexX(surf,i)
y0#=VertexY(surf,i)
z0#=VertexZ(surf,i)

;alfa vocrug z
x1#=x0#*Cos(alfa)+y0#*Sin(alfa)
y1#=-x0#*Sin(alfa)+y0#*Cos(alfa)
z1#=z0#

;beta vokrug x

x2#=x1#
y2#=y1*Cos(beta)+z1*Sin(beta)
z2#=-y1*Sin(beta)+z1*Cos(beta)

;gama wokrug y
x3#=x2*Cos(-gama)+z2*Sin(-gama)
y3#=y2
z3#=-x2*Sin(-gama)+z2*Cos(-gama)

VertexCoords surf,i,x3,y3,z3

Next
UpdateNormals selectedmesh;it makes this function in two times slower
End Function



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot