javascript/math: rotación incorrecta de elementos alrededor de un círculo

Estoy tratando de organizar una serie de planos en un círculo, "mirando" hacia el centro, pero obtengo algunos resultados extraños después de pasar los 180 grados. Mis objetos están distribuidos correctamente alrededor del círculo, pero la rotación está desactivada. Adjunté una captura de pantalla y mi código está debajo: ¿qué pasa con mi ecuación?

var circleRadius = 12;
var diameter = circleRadius*2;
var centerX = -5;
var centerZ = -2.5;

var mpi = Math.PI/180;
var startRadians = startAngle + mpi;
var totalSpheres = 8;
var incrementAngle = 360/totalSpheres;
var incrementRadians = incrementAngle * mpi;

for ( var i = 0; i < totalSpheres; i ++ ) {

    var xp = centerX + Math.sin(startRadians) * circleRadius;
    var zp = centerZ + Math.cos(startRadians) * circleRadius;

    var camObj = new THREE.Mesh( new THREE.PlaneGeometry( 1*camSize, .75*camSize ), material );

    camObj.position.x = xp;
    camObj.position.z = zp;
    camObj.rotation.y = i*incrementAngle; //MH - do this without degrees
    console.log(camObj.rotation.y);
    startRadians += incrementRadians;

    scene.add( camObj );

}

alineación de objetos

preguntado el 03 de mayo de 12 a las 18:05

¿Cuál es el resultado de su console.log? Has probado -i*incrementAngle? -

log produce números predecibles: 45, 90, 135, 180, etc. Negativo, no solucioné el problema. -

1 Respuestas

Podría estar equivocado. Nunca usé la biblioteca, pero al mirarla en github parece que la rotación debería estar en radianes, no en grados.

var circleRadius = 12;
var diameter = circleRadius*2;
var centerX = -5;
var centerZ = -2.5;

var mpi = Math.PI/180;
var startRadians = startAngle + mpi;
var totalSpheres = 8;
var incrementAngle = 360/totalSpheres;
var incrementRadians = incrementAngle * mpi;

for ( var i = 0; i < totalSpheres; i ++ ) {

    var xp = centerX + Math.sin(startRadians) * circleRadius;
    var zp = centerZ + Math.cos(startRadians) * circleRadius;

    var camObj = new THREE.Mesh( new THREE.PlaneGeometry( 1*camSize, .75*camSize ), material );

    camObj.position.x = xp;
    camObj.position.z = zp;
    camObj.rotation.y = i*incrementAngle * (Math.PI/180.0); //MH - do this without degrees
    console.log(camObj.rotation.y);
    startRadians += incrementRadians;

    scene.add( camObj );

}

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.