about summary refs log tree commit diff homepage
path: root/utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py')
-rw-r--r--utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py118
1 files changed, 59 insertions, 59 deletions
diff --git a/utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py b/utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py
index a600a64f..d310c20a 100644
--- a/utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py
+++ b/utils/hacks/TreeGraphs/Graphics/Geometry/Intersect2D.py
@@ -1,59 +1,59 @@
-import vec2, math

-

-def intersectLineCircle((p, no), (C, r)):

-	x = vec2.sub(p,C)

-	b = 2.*vec2.dot(no, x)

-	c = vec2.sqr(x) - r*r

-	dist = b*b - 4*c

-	

-	if dist<0:

-		return None

-	else:

-		d = math.sqrt(dist)

-		t0 = (-b - d)*.5

-		t1 = (-b + d)*.5

-		return (t0,t1)

-	

-#def intersectLineCircle((lineP,lineN),(circleP,circleR)):

-#	dx,dy = vec2.sub(lineP,circleP)

-#	nx,ny = lineN

-#

-#	a =   (nx*nx + ny*ny)

-#	b = 2*(dx*nx + dy*ny)

-#	c =   (dx*dx + dy*dy) - circleR*circleR

-#	

-#	k = b*b - 4*a*c

-#	if k<0:

-#		return None

-#	else:

-#		d = math.sqrt(k)

-#		t1 = (-b - d)/2*a

-#		t0 = (-b + d)/2*a

-#		return t0,t1

-	

-def intersectCircleCircle(c0P, c0R, c1P, c1R):

-	v = vec2.sub(c1P, c0P)

-	d = vec2.length(v)

-	

-	R = c0R

-	r = c1R

-

-	try:	

-		x = (d*d - r*r + R*R)/(2*d)

-	except ZeroDivisionError:

-		if R<r:

-			return 'inside',()

-		elif r>R:

-			return 'outside',()

-		else:

-			return 'coincident',()

-	

-	k = R*R - x*x

-	if k<0:

-		if x<0:

-			return 'inside',()

-		else:

-			return 'outside',()

-	else:

-		y = math.sqrt(k)

-		return 'intersect',(vec2.toangle(v),vec2.toangle((x,y)))

+import vec2, math
+
+def intersectLineCircle((p, no), (C, r)):
+	x = vec2.sub(p,C)
+	b = 2.*vec2.dot(no, x)
+	c = vec2.sqr(x) - r*r
+	dist = b*b - 4*c
+	
+	if dist<0:
+		return None
+	else:
+		d = math.sqrt(dist)
+		t0 = (-b - d)*.5
+		t1 = (-b + d)*.5
+		return (t0,t1)
+	
+#def intersectLineCircle((lineP,lineN),(circleP,circleR)):
+#	dx,dy = vec2.sub(lineP,circleP)
+#	nx,ny = lineN
+#
+#	a =   (nx*nx + ny*ny)
+#	b = 2*(dx*nx + dy*ny)
+#	c =   (dx*dx + dy*dy) - circleR*circleR
+#	
+#	k = b*b - 4*a*c
+#	if k<0:
+#		return None
+#	else:
+#		d = math.sqrt(k)
+#		t1 = (-b - d)/2*a
+#		t0 = (-b + d)/2*a
+#		return t0,t1
+	
+def intersectCircleCircle(c0P, c0R, c1P, c1R):
+	v = vec2.sub(c1P, c0P)
+	d = vec2.length(v)
+	
+	R = c0R
+	r = c1R
+
+	try:	
+		x = (d*d - r*r + R*R)/(2*d)
+	except ZeroDivisionError:
+		if R<r:
+			return 'inside',()
+		elif r>R:
+			return 'outside',()
+		else:
+			return 'coincident',()
+	
+	k = R*R - x*x
+	if k<0:
+		if x<0:
+			return 'inside',()
+		else:
+			return 'outside',()
+	else:
+		y = math.sqrt(k)
+		return 'intersect',(vec2.toangle(v),vec2.toangle((x,y)))