Я немного продуплил сначала.
Не пробовал пример 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