⍝ Polar from cartesian coordinates:
⍝ Cartesian from polar coordinates:

    cmpts ← ⍉↑ ¯1 0 1∘.,1 0 ¯1              ⍝ compass points.

    ⍴cmpts                                  ⍝ 3×3 array of coordinate pairs.
2 3 3

    ⊂[⎕io] cmpts
┌─────┬────┬────┐
│¯1 1 │0 1 │1 1 │
├─────┼────┼────┤
│¯1 0 │0 0 │1 0 │
├─────┼────┼────┤
│¯1 ¯1│0 ¯1│1 ¯1│
└─────┴────┴────┘

    rnd ← {(10*-⍺)×⌊0.5+⍵×10*⍺}             ⍝ rounding to ⍺ decimal places.

    4 rnd polar cmpts                       ⍝ polar from cartesian.
1.4142 1      1.4142
1      0      1     
1.4142 1      1.4142
                    
2.3562 1.5708 0.7854
3.1416 3.1416 0     
3.927  4.7124 5.4978

    polar 0 0                               ⍝ singularity at 0 0
0 3.141592654

    ¯1 polar polar 0 0                      ⍝ round-trip awkward case.
0 0

    cmpts ≡ 6 rnd ¯1 polar polar cmpts      ⍝ round-trip.
1

    poly←{2 1∘.○(○2÷⍵)×(⍳⍵)-⍳1}             ⍝ cartesian ⍵-polygon.

    3 rnd poly 12                           ⍝ dodecagon.
1 0.866 0.5   0 ¯0.5   ¯0.866 ¯1 ¯0.866 ¯0.5    0  0.5    0.866
0 0.5   0.866 1  0.866  0.5    0 ¯0.5   ¯0.866 ¯1 ¯0.866 ¯0.5  

:If ⎕FR=645                                 ⍝ binary FP
        (1,12÷○2) ×[1] polar poly 12        ⍝ points evenly spaces 0 ≤< ○2.
    1 1 1 1 1 1 1 1 1 1  1  1
    0 1 2 3 4 5 6 7 8 9 10 11
:Else                                                           ⍝ [14426]<V>1287
:EndIf

⍝∇ polar

Back to: code

Back to: Workspaces