Показать сообщение отдельно
Старый 16.10.2005, 00:53   #5
alcosholik
 
Сообщений: n/a
Я немного продуплил сначала.

Не пробовал пример impersonalis'a, но придумал свою версию.

ax0 и ay0 - начальные координаты точки a
bx0 и by0 - начальные координаты точки b

b будет вращаться вокруг a

Для начала находим расстояние между этими точками (т.е. радиус вращения, который является величиной постоянной):
s=sqr((bx0-ax0)^2 + (by0-ay0)^2), где sqr - корень квадратный

А теперь для поворота вокруг оси x на угол angle:
by=s*cos(angle)
bz=s*sin(angle)

Аналогично делается с поворотом вокруг y и z.

Вот пример реализации на Blitz:
Graphics3D 800,600,16,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,10,0,0
RotateEntity cam,0,90,0

lit=CreateLight()

Global ax0#, ay0#, az0#
Global bx0#, by0#=3, bz0#

a=CreateSphere()
PositionEntity a,ax0,ay0,az0
b=CreateSphere()
PositionEntity b,bx0,by0,bz0

s#=Sqr((bx0-ax0)^2+(by0-ay0)^2)

While Not KeyHit(1)
angle#=angle+1

PositionEntity b,bx0,s*Cos(angle),s*Sin(angle)

RenderWorld()
Flip
Wend
End
 
Ответить с цитированием