HaskellでABCを攻略していく ~ABC002C~

問題はこれ ABC002C

三点の座標から三角形の面積を求める問題ですね。

入力

  • aのx座標 : xa
  • aのy座標 : ya
  • bのx座標 : xb
  • bのy座標 : yb
  • cのx座標 : xc
  • cのy座標 : yc

出力

a,b,cで囲まれる三角形の面積

実装

一点を原点と考えた相対的な座標で面積を計算する

ソースコード

main :: IO ()
main = do
    [xa, ya, xb, yb, xc, yc] <- map read . words <$> getLine
    print $ abs $ ((xb - xa) * (yc - ya) - (xc - xa) * (yb - ya)) / 2

各入力を受け、それぞれ束縛し、計算結果を出力する

aを原点と考えるためにそれぞれの座標からxaまたはyaを減算する。

before (xa, ya), (xb, yb), (xc, yc)

after (0, 0), (xb - xa, yb - ya), (xc - xa, yc - ya)

(0, 0), (a, b), (c, d)のとき計算式は$|ad - bc|/2$なので $|(xb - xa)(yb - ya) - (xc -xa)(yc - ya)|/2$となる この計算結果が本問題の出力値である。