| a b c u v L | a := 2@2. b := 6@4. c := 4@5. u := b - a. v := c - a. L := (u crossProduct: v) / v r. L "=> 2.218800784900917 "
つらつら Point クラスを眺めていたら #nearestPointOnLineFrom:to: 、#dist: なんて便利メソッドも見つかった。
余談ですが、#dotProduct: はあるくせになぜか #crossProduct: がない VisualWorks もこの #nearestPointOnLineFrom:to: や #dist: は使える。ので、先のコードは VisualWorks では動かないけれど、こちらのコードなら試せます。
| a b c p L | a := 2@2. b := 6@4. c := 4@5. p := c nearestPointOnLineFrom: a to: b. L := c dist: p. L "=> 1.788854381999832 "
ただ、返される値が違うようなので先のコードも正しくはこうじゃないかと。
| a b c u v L |
a := 2@2.
b := 6@4.
c := 4@5.
u := b - a.
v := c - a.
L := (u crossProduct: v) / u r.
L "=> 1.788854381999832 "