Line circle intersection: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: simplified some code, added optimization.)
Line 757: Line 757:
y_2= y2; y2= y2 + cy
y_2= y2; y2= y2 + cy
dx= x2 - x1; dy= y2 - y1
dx= x2 - x1; dy= y2 - y1
dr= sqrt(dx**2 + dy**2)
dr= sqrt(dx**2 + dy**2); dr2= dr**2
D= x1 * y2 - x2 * y1
D= x1 * y2 - x2 * y1
ix1= ( D * dy + sgn(dy) * dx * sqrt(r**2 * dr**2 - D**2) ) / dr**2
ix1= ( D * dy + sgn(dy) * dx * sqrt(r**2 * dr**2 - D**2) ) / dr2
ix2= ( D * dy - sgn(dy) * dx * sqrt(r**2 * dr**2 - D**2) ) / dr**2
ix2= ( D * dy - sgn(dy) * dx * sqrt(r**2 * dr**2 - D**2) ) / dr2
iy1= (-D * dx + abs(dy) * sqrt(r**2 * dr**2 - D**2) ) / dr**2
iy1= (-D * dx + abs(dy) * sqrt(r**2 * dr**2 - D**2) ) / dr2
iy2= (-D * dx - abs(dy) * sqrt(r**2 * dr**2 - D**2) ) / dr**2
iy2= (-D * dx - abs(dy) * sqrt(r**2 * dr**2 - D**2) ) / dr2
incidence= (r**2 * dr**2 - D**2) / 1
incidence= (r**2 * dr**2 - D**2) / 1
say 'incidence=' incidence
say 'incidence=' incidence
Line 784: Line 784:
sqrt: procedure; parse arg x; if x=0 then return 0; d=digits(); numeric digits; h=d+6
sqrt: procedure; parse arg x; if x=0 then return 0; d=digits(); numeric digits; h=d+6
numeric form; m.=9; parse value format(x,2,1,,0) 'E0' with g "E" _ .; g=g *.5'e'_ %2
numeric form; m.=9; parse value format(x,2,1,,0) 'E0' with g "E" _ .; g=g *.5'e'_ %2
do j=0 while h>9; m.j= h; h= h%2 + 1; end /*j*/
do j=0 while h>9; m.j= h; h= h%2 + 1; end /*j*/
do k=j+5 to 0 by -1; numeric digits m.k; g= (g+x/g) *.5; end /*k*/
do k=j+5 to 0 by -1; numeric digits m.k; g= (g+x/g) *.5; end /*k*/; return g</lang>
numeric digits d; return g/1</lang>
{{out|output|text=&nbsp; when using the default inputs:}}
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>
<pre>