/*
點是否在三角形內:
如果乙個二維座標系中,已知三角形頂點的座標,那麼對於座標系中的任意一點,如何判斷該點是否在三角形內(點在三角形邊線上也可)?
假設三角形頂點的座標為abc(逆時針),需要判斷點d是否在該三角形內。
分析:利用垂涎的交點可以判斷。如果點d在三角形內,所有的垂線交點都在三角形的邊線之內。如果點d在三角形之外,則垂線的交點就會在三角形邊線的延長線上。
但是鈍角三角形是不可取的,此方法錯誤。
解法1:
研究點與線段之間的關係,考慮把點d和其他的三個點連線起來。將問題轉化為比較三角形abc的面積 與 三角形abd bcd cad的面積之和
如果sabc = sabd + sbcd + scad,那麼點d在三角形abc的內部或者邊上,如果 sabc < sabd + sbcd + scad ,則點d在三角形外部。
計算三角形面積用海**式
計算出三邊的邊長分別為a,b,c,
p = (a + b + c)/2;
s = 根號下(p-a)*(p-b)*(p-c)*p
解法2:
因為三角形是凸的,所以如果有乙個d在三角形abc內,那麼沿著三角形的邊界逆時針走,點d一定保持在邊界的左邊,也就是說點d在邊ab,bc,ca的左邊。
判斷乙個點p3是否在射線p1,p2的左邊,可以通過p1p2,p1p3兩個向量叉積的正負判斷
如果叉積為正,則p3在p1p2的左邊
負, 右
0, 射線上
輸入:3 2(輸入測試點的座標)
1 1(輸入三角形三個頂點的座標)
5 13 3
2 31 1
5 13 3
輸出:yes
no*/
/*關鍵:
1 if(dsabd + dsbcd + dscda > dsabc)//如果三個小三角形的面積大於原三角形面積,那麼說明測試點不再原三角形內
2 return sqrt( (dp - da) * (dp - db) * (dp - dc) * dp);//計算面積採用海**式,計算出三邊的邊長分別為a,b,c,p = (a + b + c)/2;s = 根號下(p-a)*(p-b)*(p-c)*p
3 bool isinrectangle_vector(const point& testpoint,point* recpoint)//通過向量來判斷測試點是否在另外兩點所形成射線的左邊,需要計算
//bd*bc >0 ,cd * ca > 0,ad * ab > 0
4 doublet dret = (point2._ix - point3._ix) * (point1._ix - point3._ix) + (point2._iy - point3._iy) * (point1._iy - point3._iy);
//我們以第三個點為主點,判斷乙個點p3是否在射線p1,p2的左邊,可以通過p1p2,p1p3兩個向量叉積的正負判斷,如果叉積為正,則p3在p1p2的左邊 */
#include #include typedef float doublet;
typedef struct point
point;
doublet distance(const point& point1,const point& point2)
doublet area(const point& point1,const point& point2,const point& point3)
bool isinrectangle(const point& testpoint,point* recpoint)
else }
bool product(const point& point1,const point& point2,const point& point3)
bool isinrectangle_vector(const point& testpoint,point* recpoint)//通過向量來判斷測試點是否在另外兩點所形成射線的左邊,需要計算
//bd*bc >0 ,cd * ca > 0,ad * ab > 0
void process()
//if(isinrectangle(testpoint,rectanglepoint))
if(isinrectangle_vector(testpoint,rectanglepoint))
else
}}int main(int argc,char* argv)
程式設計之美 第四章 數字之趣 4 10數字啞謎和回文
數字啞謎和回文 1神奇的9位數。能不能找出符合如下條件的9位數 這個數包括了1 9這9個數字 這個9位數的前n位都能被n整除,若這個數表示為abcdefghi,則ab可以被2整除,abc可以被3整除.abcdefghi可以被9整除 2有這樣乙個乘法算式 人過大佛寺 我 寺佛大過人 這裡面每乙個字都代...
程式設計之美 第四章 數字之趣 4 2瓷磚覆蓋地板
瓷磚覆蓋地板 原來的地板鋪有n m塊正方形瓷磚,商店只提供長方形瓷磚,現在一塊長方形瓷磚相當於於原來的兩塊正方形瓷磚,能否用1 2的瓷磚去覆蓋n m的地板呢 本質 斐波那契遞推數列公式 f i f i 1 f i 2 分析 n m的地板有以下幾種可能 1如果n 1,m為偶數的話,顯然1 2的瓷磚可以...
《數學之美》 第四章 個人筆記
數學之美 最近在讀 數學之美 這本書,做一下個人筆記。看的是pdf,看完後會買一本的哦!版權意識還是有的。1 中文分詞方法的演變 最早的方法 北航 查字典,可以解決七八成問題,成本不高,效果還行。隨後 哈工大 最少詞數的分詞理論,即一句話應該分詞數量最少的詞串。不足之處在於二義性。郭進 清華 統計語...