Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Tres js calculan esfera a partir de coordenadas polares

Estoy usando three.js y quiero calcular una esfera. Estoy usando dos bucles for, uno para theta y otro para phi, y luego transformo las coordenadas polares en coordenadas cartesianas. Por cada punto calculado agregué un Punto. El resultado no es una esfera.

Este es el bucle for anidado:

 const distance = 1000; for (var i = 0; i < 360; i += 10) { for (let j = 0; j < 360; j += 10) { let theta = i * (Math.PI / 180); let phi = j * (Math.PI / 180); let x = Math.sin(theta) * Math.cos(phi) * distance; let y = Math.sin(theta) * Math.sin(phi) * distance; let z = distance * Math.sin(phi); const lightSphere = new THREE.Mesh(sphereGeometry, sphereMaterial); lightSphere.position.set(x, y, z); scn.add(lightSphere); } }

Y aquí está el código completo, incluido el resultado: Enlace

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

j debe estar en el rango [-90, 90] 9 en lugar de [0, 260]. Observe que está creando cortes (360 °) desde el Polo Sur hasta el Polo Norte (180 °).

Debe calcular el sin(theta) y el cos(theta) y multiplicar ambos con cos(phi) :

let x = Math.sin(theta) * Math.cos(phi) * distance;
let y = Math.sin(theta) * Math.sin(phi) * distance;

 let x = Math.cos(theta) * Math.cos(phi) * distance; let y = Math.sin(theta) * Math.cos(phi) * distance;

Algoritmo completo:

 const distance = 1000; for (var i = 0; i < 360; i += 10) { for (let j = -90; j < 90; j += 10) { let theta = i * (Math.PI / 180); let phi = j * (Math.PI / 180); let x = Math.cos(theta) * Math.cos(phi) * distance; let y = Math.sin(theta) * Math.cos(phi) * distance; let z = distance * Math.sin(phi); const lightSphere = new THREE.Mesh(sphereGeometry, sphereMaterial); lightSphere.position.set(x, y, z); scn.add(lightSphere); } }

Crea círculos (rebanadas) usando coordenadas polares ( distance , theta ). La coordenada cartesiana se puede obtener por:

 xc = cos(theta) * distance yc = sin(theta) * distance

Finalmente haces algo similar para la esfera:

 x = xc * cos(phi) y = yc * cos(phi) z = sin(phi) * distance
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda