2011-01-25 31 views
7

Tengo un cuadrado, donde los puntos más cercanos están a 1 unidad de distancia del centro. Ver mi diagrama ascii a continuación:Dibujar cuadrado con coordenadas polares

+-----------+ 
|   | 
| x  | 
|-----+  | 
|   | 
|   | 
+-----------+ 

Por lo tanto, la distancia desde el origen a las esquinas es el sqrt (2). Necesito una función que devuelva la distancia desde el origen a un punto en el cuadrado en cualquier ángulo. Por ejemplo, para una entrada de 0, la función devolvería 1. Para una entrada de 45, la función devolvería la distancia a una esquina, la raíz cuadrada de 2. Luego, para 90, volvería a 1 de nuevo.

En otras palabras, cuando grafica la función con gráficos polares, dibujará un cuadrado.

creo que la función sería algo como esto:

f(x) = sqrt(tan(x)^2+1) 

El único problema es que la función anterior no va a representar gráficamente los lados del cuadrado. Necesito algo que dibuje los 4 lados.

Sé que hay una función trigonométrica para algo similar a esto, pero usaré esta función en javascript, por lo que solo podré usar las funciones de trigonometría estándar.

Cualquier ayuda será apreciada. Gracias por adelantado.

+0

realmente solo necesita saber la respuesta para 1/8 del cuadrado ... – Pointy

+0

Sí, pero el problema es obtener una gle para corresponder a la parte correcta de ese ángulo de 1/8. – Joel

+0

Hola @Joel: regresa y elige la respuesta de MonoMano ya que es la que está en lo cierto :-) – Pointy

Respuesta

9

Esto sería más rápido que supongo:

function getLengthForDeg(phi){ 
    phi = ((phi+45)%90-45)/180*Math.PI; 
    return 1/Math.cos(phi); 
} 
+0

Creo que te falta un cálculo de raíz cuadrada, pero puedo estar malinterpretando algo. – Pointy

+0

No creo que lo necesite. Intenta ejecutarlo, tal vez estoy equivocado. –

+0

Me gusta la forma en que se normaliza el ángulo. – Pointy

1

me ocurrió con una ecuación que puede trabajar con las calculadoras TI debido a su función de paso theta en la sección de la ventana de su función de gráfico polar. No sé si te ayuda. Supongo que solo puede funcionar si puede configurar el paso theta (o grado).

r = (((s*sqrt(2)) - 5)/4) sin(4(x - (pi/8)) + (((s*sqrt(2)) + s)/4) 

donde s es la longitud del lado del cuadrado deseado

Ajuste el paso theta a pi/4 con el fin de trazar los principales puntos necesarios para crear la imagen de un cuadrado

Nuevamente, esto funciona con calculadoras TI.

1

La publicación original está etiquetada con Javascript, pero la necesitaba para los idiomas tipados (por ejemplo, C) donde no se puede modular una flotación.

respuesta de MonoMano es correcto, pero para nadie más venir aquí necesitar la misma cosa, aquí está la respuesta de MonoMano modificado para C/ObjC/Java/etc:

/** c.f. http://stackoverflow.com/a/4788992/153422 
* M_PI_2 is a constant: "PI/2" 
* M_PI_4 is a constant: "PI/4" 
*/ 
double getSquarePolarRadiusForRad(double phi){ 
    double phiInPiBy4Range = phi; 
    while(phiInPiBy4Range > M_PI_4) 
     phiInPiBy4Range -= M_PI_2; 
    while(phiInPiBy4Range < - M_PI_4) 
     phiInPiBy4Range += M_PI_2; 

    return 1/cos(phiInPiBy4Range); 
} 
1

No soy lo suficientemente familiarizado con Javascript, pero en el formato utilizado en Wolfram Alpha, la fórmula para el radio desde el ángulo es:

min (1/abs (cos (theta)), 1/abs (sen (theta))))

+0

Esto no parece correcto ... si solo tienes un ángulo, no se sabe cuánto durará el radio. – Werner

+0

@Werner Como el OP ha preguntado específicamente sobre un cuadrado de longitud 1, no necesita el radio. –

Cuestiones relacionadas