Circles of given radius through two points: Difference between revisions

added Arturo
m (Fixed output)
(added Arturo)
Line 330:
One circle : radius: 0.0000 @( 0.1234, 0.9876)
</pre>
=={{header|Arturo}}==
 
<syntaxhighlight lang="arturo">getPoint: function [p]-> ~{(x: |p\0|, y: |p\1|)}
getCircle: function [c]-> ~{(x: |c\0|, y: |c\1|, r: |c\2|)}
 
circles: function [p1, p2, r][
if r = 0 -> return "radius of zero"
if p1 = p2 -> return "coincident points gives infinite number of circles"
 
[dx, dy]: @[p2\0 - p1\0, p2\1 - p1\1]
q: sqrt add dx*dx dy*dy
if q > 2*r -> return "separation of points > diameter"
 
p3: @[(p1\0 + p2\0)/ 2, (p1\1 + p2\1) / 2]
d: sqrt (r*r) - (q/2)*(q/2)
return @[
@[(p3\0 - d*dy/q), (p3\1 + d*dx/q), abs r],
@[(p3\0 + d*dy/q), (p3\1 - d*dx/q), abs r]
]
]
 
loop [
[[0.1234, 0.9876], [0.8765, 0.2345], 2.0]
[[0.0000, 2.0000], [0.0000, 0.0000], 1.0]
[[0.1234, 0.9876], [0.1234, 0.9876], 2.0]
[[0.1234, 0.9876], [0.8765, 0.2345], 0.5]
[[0.1234, 0.9876], [0.1234, 0.9876], 0.0]
] 'tr [
[p1, p2, r]: tr
print ["Through points:\n " getPoint p1 "\n " getPoint p2]
print ["and radius" (to :string r)++"," "you can construct the following circles:"]
if? string? cic: <= circles p1 p2 r -> print [" ERROR:" cic]
else [
[c1, c2]: cic
print [" " getCircle c1]
print [" " getCircle c2]
]
print ""
]</syntaxhighlight>
 
{{out}}
 
<pre>Through points:
(x: 0.1234, y: 0.9876)
(x: 0.8764999999999999, y: 0.2345)
and radius 2.0, you can construct the following circles:
(x: 1.863111801658189, y: 1.974211801658189, r: 2.0)
(x: -0.8632118016581896, y: -0.7521118016581892, r: 2.0)
 
Through points:
(x: 0.0, y: 2.0)
(x: 0.0, y: 0.0)
and radius 1.0, you can construct the following circles:
(x: 0.0, y: 1.0, r: 1.0)
(x: 0.0, y: 1.0, r: 1.0)
 
Through points:
(x: 0.1234, y: 0.9876)
(x: 0.1234, y: 0.9876)
and radius 2.0, you can construct the following circles:
ERROR: coincident points gives infinite number of circles
 
Through points:
(x: 0.1234, y: 0.9876)
(x: 0.8764999999999999, y: 0.2345)
and radius 0.5, you can construct the following circles:
ERROR: separation of points > diameter
 
Through points:
(x: 0.1234, y: 0.9876)
(x: 0.1234, y: 0.9876)
and radius 0.0, you can construct the following circles:
ERROR: radius of zero</pre>
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">CircleCenter(x1, y1, x2, y2, r){
Line 369 ⟶ 443:
0.1234 0.9876 0.1234 0.9876 0.0 > No circles can be drawn, points are identical
</pre>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
1,532

edits