Как преобразовать декартовы координаты в сферические координаты, а затем повернуть вокруг точки?

#javascript #3d #cartesian

Вопрос:

Я создаю программу на javascript, которая с нуля отображает 3D-мир на 2d-экране. Я создал функцию для вычисления значения x на экране, на котором будет отображаться 3D-точка. Также необходимо учитывать угол горизонтали, вокруг которого необходимо повернуть точки. Для этого я попытался преобразовать в сферические координаты, а затем добавить угол x наблюдателя к одному из значений. По какой-то причине это искажает все, когда вы не смотрите на ноль градусов. Вот код, а вот выходные данные всей программы: https:// 3d.napoleon1027.repl.co/ (Прямо сейчас он настроен на медленное вращение каждые три секунды, и вы можете перемещаться с помощью клавиш со стрелками / WSAD)

 function fx(x,y,z){
//calculates the x, y, and z values relative to your position
z-=pz
x-=px
y-=py

//converts the cartesian coordinates to spherical
var r=Math.sqrt(x**2 y**2 z**2)
var t=Math.acos(z/r)
var f=Math.atan(y/x)
if(x<0){
  f =Math.PI
}

//adds your angle to the angle of theta
t =xangle

//converts the spherical coordinates back to cartesian
x=r*Math.cos(f)*Math.sin(t)
y=r*Math.sin(f)*Math.sin(t)
z=r*Math.cos(t)

//adds the player coordinates back
z =pz
x =px
y =py

//returns the x value that this point should be drawn onto the screen at
  return (x-px)/(z-pz);
}
 

Комментарии:

1. ссылка находится здесь: 3d.napoleon1027.repl.co