Circles of given radius through two points: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js compatible
(Using Real Math module)
m (→‎{{header|Phix}}: added syntax colouring, marked p2js compatible)
Line 2,998:
 
=={{header|Phix}}==
<!--<lang Phix>(phixonline)-->
<lang Phix>constant tests = {{0.1234, 0.9876, 0.8765, 0.2345, 2.0},
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
{0.0000, 2.0000, 0.0000, 0.0000, 1.0},
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.8765</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.2345</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2.0</span><span style="color: #0000FF;">},</span>
{0.1234, 0.9876, 0.1234, 0.9876, 2.0},
<span style="color: #0000FF;">{</span><span style="color: #000000;">0.0000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2.0000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.0000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.0000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1.0</span><span style="color: #0000FF;">},</span>
{0.1234, 0.9876, 0.8765, 0.2345, 0.5},
<span style="color: #0000FF;">{</span><span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2.0</span><span style="color: #0000FF;">},</span>
{0.1234, 0.9876, 0.1234, 0.9876, 0.0}}
<span style="color: #0000FF;">{</span><span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.8765</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.2345</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.5</span><span style="color: #0000FF;">},</span>
for i=1 to length(tests) do
<span style="color: #0000FF;">{</span><span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.1234</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.9876</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.0</span><span style="color: #0000FF;">}}</span>
atom {x1,y1,x2,y2,r} = tests[i],
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
xd = x2-x1, yd = y1-y2,
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">r</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
s2 = xd*xd+yd*yd,
<span style="color: #000000;">xd</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x2</span><span style="color: #0000FF;">-</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">yd</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">y1</span><span style="color: #0000FF;">-</span><span style="color: #000000;">y2</span><span style="color: #0000FF;">,</span>
sep = sqrt(s2),
<span style="color: #000000;">s2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xd</span><span style="color: #0000FF;">*</span><span style="color: #000000;">xd</span><span style="color: #0000FF;">+</span><span style="color: #000000;">yd</span><span style="color: #0000FF;">*</span><span style="color: #000000;">yd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">sep</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">),</span>
xh = (x1+x2)/2,
<span style="color: #000000;">xh</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">yh</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">y1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">y2</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">2</span>
yh = (y1+y2)/2
<span style="color: #004080;">string</span> <span style="color: #000000;">txt</span>
string txt
<span style="color: #008080;">if</span> <span style="color: #000000;">sep</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
if sep=0 then
<span style="color: #000000;">txt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"same points/"</span><span style="color: #0000FF;">&</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"radius is zero"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"infinite solutions"</span><span style="color: #0000FF;">)</span>
txt = "same points/"&iff(r=0?"radius is zero":"infinite solutions")
<span style="color: #008080;">elsif</span> <span style="color: #000000;">sep</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">r</span> <span style="color: #008080;">then</span>
elsif sep=2*r then
<span style="color: #000000;">txt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"opposite ends of diameter with centre {%.4f,%.4f}"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">xh</span><span style="color: #0000FF;">,</span><span style="color: #000000;">yh</span><span style="color: #0000FF;">})</span>
txt = sprintf("opposite ends of diameter with centre {%.4f,%.4f}",{xh,yh})
<span style="color: #008080;">elsif</span> <span style="color: #000000;">sep</span><span style="color: #0000FF;">></span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">r</span> <span style="color: #008080;">then</span>
elsif sep>2*r then
<span style="color: #000000;">txt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"too far apart (%.4f &gt; %.4f)"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">sep</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">r</span><span style="color: #0000FF;">})</span>
txt = sprintf("too far apart (%.4f > %.4f)",{sep,2*r})
<span style="color: #008080;">else</span>
else
<span style="color: #004080;">atom</span> <span style="color: #000000;">md</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sqrt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">r</span><span style="color: #0000FF;">*</span><span style="color: #000000;">r</span><span style="color: #0000FF;">-</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">/</span><span style="color: #000000;">4</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">xs</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">md</span><span style="color: #0000FF;">*</span><span style="color: #000000;">xd</span><span style="color: #0000FF;">/</span><span style="color: #000000;">sep</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ys</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">md</span><span style="color: #0000FF;">*</span><span style="color: #000000;">yd</span><span style="color: #0000FF;">/</span><span style="color: #000000;">sep</span>
atom md = sqrt(r*r-s2/4),
<span style="color: #000000;">txt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"{%.4f,%.4f} and {%.4f,%.4f}"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">xh</span><span style="color: #0000FF;">+</span><span style="color: #000000;">ys</span><span style="color: #0000FF;">,</span><span style="color: #000000;">yh</span><span style="color: #0000FF;">+</span><span style="color: #000000;">xs</span><span style="color: #0000FF;">,</span><span style="color: #000000;">xh</span><span style="color: #0000FF;">-</span><span style="color: #000000;">ys</span><span style="color: #0000FF;">,</span><span style="color: #000000;">yh</span><span style="color: #0000FF;">-</span><span style="color: #000000;">xs</span><span style="color: #0000FF;">})</span>
xs = md*xd/sep,
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
ys = md*yd/sep
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"points {%.4f,%.4f}, {%.4f,%.4f} with radius %.1f ==&gt; %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">r</span><span style="color: #0000FF;">,</span><span style="color: #000000;">txt</span><span style="color: #0000FF;">})</span>
txt = sprintf("{%.4f,%.4f} and {%.4f,%.4f}",{xh+ys,yh+xs,xh-ys,yh-xs})
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end if
end for<!--</lang>-->
printf(1,"points {%.4f,%.4f}, {%.4f,%.4f} with radius %.1f ==> %s\n",{x1,y1,x2,y2,r,txt})
end for</lang>
{{out}}
<pre>
7,806

edits