Haskellで、平面内の3つのポイントを取り、それらが直線上にあるかどうか、または右または左に曲がるかどうかをチェックする関数を作成しました。
コードは次のとおりです。
detDirection :: Point -> Point -> Point -> Direction
detDirection a@(Point (x1, y1)) b@(Point (x2, y2)) c
= if (collinear1 a b c)
then Straight
else let
ab = Vector [x2 - x1, y2 - y1]
angleAbX = angle ab (Vector [1, 0])
(Point (x1, y1)) = turnAtP a b angleAbX
(Point (x2, y2)) = turnAtP a c angleAbX
in if (y1 > y2)
then Right
else Left
私はGHCiでテストしましたcollinear1
が、すべてすぐに終了します。
ただし、永久に実行され続けます。angle
turnAtP
detDirection
誰かがここの問題がどこにあるか教えてもらえますか?