判斷一個點是否在三角形內部

題目

在二維座標系中,所有的值都是double類型,那麼一個三角形可以由3個點來代筆,給定3個點代表的三角形,在給定一個點(x,y),判斷(x,y)是否在三角形中。

問題分析

1.根據面積求解
如果O點在三角形內部,則面積ABC=面積ABO+面積BCO+面積CAO
如果O點在三角形外部,則面積ABC<面積ABO+面積BCO+面積CAO
2.逆時針繞三角形走一圈,如果O點在三角形內部,則O始終在走過邊的左側。判斷一個點在一條有向邊的左邊還是右邊,用向量的叉乘公式求解即可。

JAVA代碼實現

package otherquestions;

public class IsInsideTriangle1209 {

	/**
	 * 判斷兩個數的叉乘
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @return
	 */
	public double crossProduct(double x1, double y1, double x2, double y2) {
		return x1 * y2 - x2 * y1;
	}
	
	public boolean isInsideTrian(double x1, double y1, double x2, double y2, 
			double x3, double y3, double x, double y) {
		//如果三角形的點不是逆時針輸入,改變一下順序
		if (crossProduct(x3 - x1, y3 - y1, x2 - x1, y2 - y1) >= 0) {
			double tmpx = x2;
			double tmpy = y2;
			x2 = x3;
			y2 = y3;
			x3 = tmpx;
			y3 = tmpy;
		}
		//如果有向邊1->2叉乘1->3的結果爲正,說明2在有向邊的1->3的左邊
		if (crossProduct(x2 - x1, y2 - y1, x - x1, y - y1) < 0) {
			return false;
		}
		if (crossProduct(x3 - x2, y3 - y2, x - x2, y - y2) < 0) {
			return false;
		}
		if (crossProduct(x1 - x3, y1 - y3, x - x3, y - y3) < 0) {
			return false;
		}
		return true;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章