--- a/LineSegment.st Sat May 30 00:11:35 2009 +0200
+++ b/LineSegment.st Sat Jun 06 12:05:58 2009 +0200
@@ -287,6 +287,45 @@
"Created: 12.2.1997 / 11:43:50 / cg"
!
+dist:p
+ "the distance of aPoint to this segment"
+
+ |a b u v px py ax ay bx by|
+
+ a := startPoint.
+ b := endPoint.
+ ax := a x.
+ ay := a y.
+ bx := b x.
+ by := b y.
+ px := p x.
+ py := p y.
+
+ u := p - a.
+ v := b - a.
+ ((u x * v x) + (u y * v y)) < 0 ifTrue:[
+ ^ (( px - ax) squared + (py - ay) squared) sqrt
+ ].
+
+ u := p - b.
+ v := v negated.
+ ((u x * v x) + (u y * v y)) < 0 ifTrue:[
+ ^ (( px - bx) squared + (py - by) squared) sqrt
+ ].
+
+ ^( (( px * ( ay - by )) + (py * ( bx - ax )) + ( (ax * by) - (bx * ay) ) )
+ / ( ( bx - ax )squared + ( by - ay )squared ) sqrt ) abs
+
+ "
+ (LineSegment from:(0@0) to:(10@10)) dist:0@0
+ (LineSegment from:(0@0) to:(10@10)) dist:10@10
+ (LineSegment from:(0@0) to:(10@10)) dist:-1@-1
+ (LineSegment from:(0@0) to:(10@10)) dist:5@5
+ (LineSegment from:(0@0) to:(10@10)) dist:6@4
+ (LineSegment from:(0@0) to:(10@10)) dist:5@0
+ "
+!
+
isHorizontal
"return true, if I am a horizontal line"
@@ -332,5 +371,5 @@
!LineSegment class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/LineSegment.st,v 1.19 2009-02-26 21:28:32 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/LineSegment.st,v 1.20 2009-06-06 10:05:58 cg Exp $'
! !