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) ) / |
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) ) / |
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) ) / |
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) ) / |
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 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= when using the default inputs:}} |
{{out|output|text= when using the default inputs:}} |
||
<pre> |
<pre> |