4 votos

Geometría: ¿Qué se está calculando aquí?

Contexto: soy gráficos de computadora programador de mirar un código de implementación. Necesito ayuda para la comprensión de una función que no ha sido documentado adecuadamente ni comentado.

Dado un círculo con la circunferencia de la $c$ en el espacio de coordenadas Cartesianas. Ahora cada punto de este círculo está definida por coordenadas Cartesianas $(x, y)$.

Necesito algunas explicaciones en cuanto a lo que los cálculos siguientes lograr, por favor, disculpe el uso indebido de los símbolos:


$$ \begin{align} nX = \frac {x}{c}\\ nY = \frac {y}{c} \end{align} $$

I believe $n$ stands for 'normal' or vector. then...


$$ \begin{align} rdX = nX \cdot 2\pi\\ rdY = nY \cdot \pi \end{align} $$

I assume 'rd' stands for radians. What really puzzles me here is why nX is multiplied with $2\pi$, while $nY$ is only multiplied by $\pi$.


$$ \begin{align} \sin Y = \sin(rdY + \pi) \end{align} $$

En este punto estoy completamente perdido...


ahora por fin: $$ \begin{align} a = 2\pi\cdot\sin(rdX)\cdot\sin Y\\ b = 2\pi\cdot\cos(rdX)\cdot\sin Y\\ d = 2\pi\cdot\cos(rdy) \end{align} $$


Very simple question; What is being calculated here? What do a,b and d represent? At first i figured that this was a conversion from Cartesian coordinates to spherical coordinates. But given a closer look, this is not at all how I would calculate them. What am I looking at here?


EDIT:

I will include the source of these calculations to clarify their context. They are part of a library that provides functions for working with Simplex Noise.

They appear in functions that sample a generated noise field. This noise field can be sampled in n-dimensions. This sampling means that I provide a set of parameters (usually coordinates) to the noise functions, which return a noise value, eg:

var noiseValue = simplexNoise.get2DNoise( x, y )
var noiseValue = simplexNoise.get3DNoise( x, y, z )
var noiseValue = simplexNoise.get4DNoise( x, y, z, w )

An example:

If I generate a grid of points in a plane dimension (two dimensions), and then sample noise values of those points using their coordinates:

z = simplexNoise.get2DNoise( x, y )

Then now I suddenly have a third dimension. This to say i started with this, and ended up sampling my z values to result in this. The noise function assures me that I do not have completely random values.


Now however, I want to sample noise on a spherical surface. And I encounter these two functions:

FastSimplexNoise.prototype.getSpherical2DNoise = function (c, x, y) {
  var nx = x / c;
  var ny = y / c;
  var rdx = nx * 2 * Math.PI;
  var rdy = ny * Math.PI;
  var sinY = Math.sin(rdy + Math.PI);
  var sinRds = 2 * Math.PI;
  var a = sinRds * Math.sin(rdx) * sinY;
  var b = sinRds * Math.cos(rdx) * sinY;
  var d = sinRds * Math.cos(rdy);

  return this.get3DNoise(a, b, d);
};

FastSimplexNoise.prototype.getSpherical3DNoise = function (c, x, y, z) {
  var nx = x / c;
  var ny = y / c;
  var rdx = nx * 2 * Math.PI;
  var rdy = ny * Math.PI;
  var sinY = Math.sin(rdy + Math.PI);
  var sinRds = 2 * Math.PI;
  var a = sinRds * Math.sin(rdx) * sinY;
  var b = sinRds * Math.cos(rdx) * sinY;
  var d = sinRds * Math.cos(rdy);

  return this.get4DNoise(a, b, d, z);
};

Note in particular that getSpherical3DNoise(c, x, y) ends up sampling the three-dimensional pointvector $(a, b, d)$, given only an $( x,y )$ coordinate and circumference $c$

The second function, getSpherical3DNoise(c, x, y, z) seems like an incomprehensible follow-up to the previous function by sampling a four-dimensional vector $(a, b, d, z)$, $z$ being the Cartesian coordinate along the $z$-eje

Estas funciones se comportan de forma extraña, por decir lo menos. Así que ellos son incomprehansably hábilmente escrito. O que garantiza una reescritura.

3voto

Alex M. Puntos 9816

Tenga en cuenta que $\sin Y = -\sin rdY$, lo $Y$ es redundante. Escriba su fórmulas en claro, la eliminación de todas las variables intermedias:

$$\begin{eqnarray*} a = -2 \pi \sin \frac {2 \pi x} c \sin \frac {\pi y} c \\ b = -2 \pi \cos \frac {2 \pi x} c \sin \frac {\pi y} c \\ d = 2 \pi \cos \frac {\pi y} c . \end{eqnarray*}$$

Tenga en cuenta que $a^2 + b^2 + d^2 = 4 \pi ^2$ y que la asignación de $(x,y) \mapsto (a,b,d)$ es inyectiva. Por lo tanto, lo que estas fórmulas hacer es asignar el cuadrado de $[0,c) \times [0,c)$ (puntos en los que están representados por $(x,y)$ $c$ ser físico, no matemático parámetro) en alguna parte de la esfera centrada en $(0,0,0)$ y de radio $2 \pi$. (Tenga en cuenta que cuando digo "la plaza", me refiero a la "plena", "sólido" de la plaza, pero cuando digo "esfera" me refiero solo a la superficie, y no el cuerpo sólido.)

He borrado la versión anterior de mi respuesta, era innecesariamente detallada. Tenga en cuenta, sin embargo, que el programador decidió trabajar con una cierta convención con respecto a la orientación de los ejes y la medición de los ángulos en $\Bbb R ^3$ que no está entre los varios que comúnmente son utilizados en matemáticas.

2voto

String Puntos 8937

Todo esto es muy extraño! Supongamos $(x,y)=(r x',ry')$, de modo que $(x',y')=(\cos\theta,\sin\theta)$ es algún punto en el círculo unitario. Entonces tenemos $$ \begin{align} a&=2\pi\cdot\cos(x'-\pi/2)\cdot\cos(-y'/2-\pi/2)\\ b&=2\pi\cdot\sin(x'-\pi/2)\cdot\cos(-y'/2-\pi/2)\\ d&=2\pi\cdot\sin(-y'/2-\pi/2) \end{align} $$ Esto puede ser interpretado como un punto en un $2\pi$-radio de la esfera en la $(a,b,d)$-plano, primer girado un ángulo de $(x'-\pi/2)$ radianes, entonces gira lejos de la $(a,b)$-plano de la tercera dimensión por un ángulo de $(-y'/2-\pi/2$. Extraño!


Traté de trazado de lo que hace - se forma un 8 en forma de curva en una esfera de radio $2\pi$. Me prometí a añadir una parcela, y aquí está:

enter image description here

El punto de $A=(x',y')$ atraviesa el círculo unidad y hace que el punto de $B=(a,b,d)$ de atravesar un 8-forma de la curva en el $2\pi$-esfera.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X