2011-01-25 12 views
7

Mam kwadrat, gdzie najbliższe punkty znajdują się 1 jednostkę od centrum. Zobacz mój poniższy diagram:Narysuj kwadrat ze współrzędnymi biegunowymi

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

Dlatego odległość od początku do narożników to sqrt (2). Potrzebuję funkcji, która zwraca odległość od początku do punktu na kwadracie pod dowolnym kątem. Na przykład, dla wejścia 0, funkcja zwróci 1. Dla wejścia 45 funkcja zwróci odległość do narożnika, pierwiastek kwadratowy z 2. Następnie dla 90, zwróci 1 ponownie.

Innymi słowy, podczas tworzenia wykresu funkcji za pomocą wykresu biegunowego, narysuje kwadrat.

wierzę, że funkcja będzie coś takiego:

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

Jedynym problemem jest to, że funkcja nie będzie wykres powyżej boków kwadratu. Potrzebuję czegoś, co przyciągnie wszystkie 4 strony.

Wiem, że istnieje funkcja trygonometryczna dla czegoś podobnego, ale będę używał tej funkcji w javascript, więc będę mógł używać tylko standardowych funkcji trygonometrycznych.

Każda pomoc zostanie doceniona. Z góry dziękuję.

+0

Ci naprawdę wystarczy znać odpowiedź na 1/8 kwadratu ... – Pointy

+0

Tak, ale problemem jest uzyskanie każdego odpowiadając właściwej części tego 1/8 kąta. – Joel

+0

Hej @Joel - wróć i wybierz odpowiedź MonoMano, ponieważ jest to właściwa odpowiedź :-) – Pointy

Odpowiedz

9

Byłoby szybciej Chyba:

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

Myślę, że brakuje ci obliczenia pierwiastka kwadratowego, ale może coś nie rozumiem. – Pointy

+0

Nie potrzebuję tego. Spróbuj go uruchomić, może się mylę. –

+0

Ja podoba mi się sposób, w jaki kąt jest znormalizowany. – Pointy

1

wymyśliłem równania, które mogą pracować z kalkulatorów TI z powodu ich funkcji skokowej theta w sekcji okna swojego polarnego funkcji wykresu. Nie wiem, czy to ci pomaga. Myślę, że to może działać tylko wtedy, gdy jesteś w stanie skonfigurować krok theta (lub stopień).

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

gdzie S jest długością boku pożądanego placu

Zestaw etap theta PI/4, w celu wykreślić główne elementy potrzebne do tworzenia obrazu kwadratu

Ponownie działa to z kalkulatorami TI.

1

Oryginalny post jest oznaczony JavaScript, ale potrzebowałem tego w językach pisanych na maszynie (np. C), w których nie można modulować liczby zmiennoprzecinkowej.

odpowiedź MonoMano jest poprawna, ale dla każdego, kto jeszcze tu przyjeżdżać, która to samo, oto odpowiedź MonoMano za zmodyfikowane dla 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

nie jestem na tyle zaznajomiony z JavaScript, ale w postaci stosowanych w Wolfram Alpha wzór na promieniu od tego kąta jest:

min (1/ABS (cos (teta)), 1/ABS (sin (teta))))

+0

To nie wydaje się właściwe ... jeśli masz tylko jakiś kąt, nie wiadomo, jak długi będzie promień. – Werner

+0

@Werner Ponieważ PO specjalnie pytano o kwadrat o długości 1, nie potrzebujesz promienia. –