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$となる
この計算結果が本問題の出力値である。