2011-01-25 12 views
7

Ho un quadrato, dove i punti più vicini sono a 1 unità di distanza dal centro. Vedere la mia schema ascii di seguito:Disegno quadrato con coordinate polari

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

Pertanto, la distanza dall'origine agli angoli è la sqrt (2). Ho bisogno di una funzione che restituisca la distanza dall'origine a un punto sul quadrato con qualsiasi angolazione. Ad esempio, per un input di 0, la funzione restituirebbe 1. Per un input di 45, la funzione restituirebbe la distanza a un angolo, la radice quadrata di 2. Quindi per 90, restituirebbe 1 nuovamente.

In altre parole, quando si gra fi ca la funzione con la rappresentazione polare, verrà disegnato un quadrato.

ritengo che la funzione sarebbe qualcosa di simile:

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

L'unico problema è che la funzione di cui sopra non mostrare i lati del quadrato. Ho bisogno di qualcosa che attiri tutti e 4 i lati.

So che esiste una funzione trigonometrica per qualcosa di simile a questo, ma userò questa funzione in javascript, quindi potrò utilizzare solo le funzioni di trigonometria standard.

Qualsiasi aiuto sarà apprezzato. Grazie in anticipo.

+0

davvero ho solo bisogno di sapere la risposta per 1/8 del quadrato ... – Pointy

+0

Sì, ma il problema è ottenere ogni gle per corrispondere alla parte corretta di quell'angolo 1/8. – Joel

+0

Hey @Joel - torna indietro e scegli la risposta di MonoMano perché è quella giusta :-) – Pointy

risposta

9

Questo sarebbe più veloce immagino:

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

Penso che manchi un calcolo della radice quadrata, ma potrei avere frainteso qualcosa. – Pointy

+0

Non credo di aver bisogno di questo. Prova a eseguirlo, forse mi sbaglio. –

+0

Mi piace come si normalizza l'angolo. – Pointy

1

mi si avvicinò con un'equazione in grado di lavorare con le calcolatrici TI a causa della loro funzione passo theta nella sezione finestra della loro funzione grafico polare. Non so se ti aiuta. Immagino che possa funzionare solo se sei in grado di configurare il passo theta (o gradi).

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

dove s è la lunghezza del lato del quadrato desiderata

Impostare la fase theta a pi/4 al fine di tracciare i punti principali necessari per creare l'immagine di un quadrato

Ancora una volta, questo funziona con calcolatrici TI.

1

Il post originale è taggato Javascript, ma avevo bisogno di questo per le lingue tipizzate (ad esempio C) in cui non è possibile modificare un float.

risposta di MonoMano è corretta, ma per chiunque altro venire qui la necessità della stessa cosa, ecco la risposta di MonoMano modificato per 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

io non sono abbastanza familiarità con JavaScript, ma nel formato utilizzato in Wolfram Alpha, la formula per il raggio dal punto di vista è:

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

+0

Questo non sembra giusto ... se hai solo un angolo, non si sa per quanto tempo il raggio sarebbe. – Werner

+0

@Werner Poiché l'OP ha chiesto espressamente un quadrato di lunghezza 1, non è necessario il raggio. –