zerojudge j251. 111北二5b.計算面積

題目在 https://zerojudge.tw/ShowProblem?problemid=j251

這題用數學公式解即可. 三個座標點的三角形面積公式搞清楚就好.

三個點如果是 P0(x0,y0), P1(x1,y1), P2(x2,y2)

隨便用哪個點當出發點都行, 可以構成兩個向量, 我就用P0好了.

V0=P1-P0 = (x1-x0, y1-y0) = (V0x,V0y)

V1=P2-P0 = (x2-x0, y2-y0) = (V1x,V1y)

然後兩個向量的外積,就是這三個點形成的三角形面積的兩倍.剛好就是題目的答案.

順便一題, 外積為0,就是這兩個向量共線. 這題不用特別判斷, 反正也會算出0.

外積 V0 X V1 = V0x * V1y – V1x * V0y

把外積的絕對值印出來即可, 完整程式如下.

#include <stdio.h>
#include <math.h>
#include <cmath>
#include <iostream>


int main(){

	long P[3][2]; //P0,P1,P2,P0,P1
	scanf("%ld %ld %ld %ld %ld %ld",
		&P[0][0],&P[0][1],&P[1][0],&P[1][1],&P[2][0],&P[2][1]);
	long V[2][2];

	//V[0][]=P1-P0
	V[0][0]=P[1][0]-P[0][0];
	V[0][1]=P[1][1]-P[0][1];

	//V[1][]=P2-P0
	V[1][0]=P[2][0]-P[0][0];
	V[1][1]=P[2][1]-P[0][1];

	long v1=V[0][0]*V[1][1];
	long v2=V[1][0]*V[0][1];

	long v=abs((V[0][0]*V[1][1])-(V[1][0]*V[0][1]));

	printf("%ld\n",v);

}
C++

外積介紹可參考維基百科 https://zh.wikipedia.org/zh-tw/%E5%8F%89%E7%A7%AF