判断点在三角形内外
2014-09-23 21:26
246 查看
思想:
首先要先给个公式······其实我是第一次见·······瞬间暴漏了我渣渣的屌丝本质······三角形面积公式:S = 1 / 2 * | crossProduct(a , b) |
其中a , b为三角形三点所确定的两个向量·······三角形面积的向量叉积求法······新技能get·······
接下来转入正题,如果p在三角形内部,那么它一定可以把三角形分成三部分,三部分的面积和应该与总面积相等。当p在三角形边上或者顶点上时,面积看成0.
代码目前没想到怎么精炼······有想到的欢迎回复·······我如果想到精炼方法的话会尽快补充·······
完整代码:
#include <iostream> #include <cstdio> #include <cmath> using namespace std; struct point { double x; double y; }; struct v { point start; point end; }; struct triangle { point A; point B; point C; }; double crossProduct(v *v1 , v *v2) { /* v vt1 , vt2; double result = 0; vt1.start.x = 0; vt1.start.y = 0; vt1.end.x = v1->end.x - v1->start.x; vt1.end.y = v1->end.y - v1->start.y; vt2.start.x = 0; vt2.start.y = 0; vt2.end.x = v2->end.x - v2->start.x; vt2.end.y = v2->end.y - v2->start.y; result = vt1.end.x * vt2.end.y - vt2.end.x * vt1.end.y; return result; */ return (v1->end.x - v1->start.x) * (v2->end.y - v2->start.y) - (v1->end.y - v1->start.y) * (v2->end.x - v2->start.x); } bool inTriangle(triangle t , point P) { v AB , AC , BC , PA , PB , PC; AB.start = t.A; AB.end = t.B; AC.start = t.A; AC.end = t.C; BC.start = t.B; BC.end = t.C; PA.start = P; PA.end = t.A; PB.start = P; PB.end = t.B; PC.start = P; PC.end = t.C; double Sabc = fabs(crossProduct(&AB , &AC)); double Spab = fabs(crossProduct(&PA , &PB)); double Spac = fabs(crossProduct(&PC , &PA)); double Spbc = fabs(crossProduct(&PB , &PC)); if(Sabc == Spab + Spac + Spbc) return true; else return false; } int main() { triangle t; point p; cin >> t.A.x >> t.A.y; cin >> t.B.x >> t.B.y; cin >> t.C.x >> t.C.y; cin >> p.x >> p.y; if(inTriangle(t , p)) cout << "Q点在三角形ABC内" << endl; else cout << "Q点不在三角形ABC内" << endl; } /* 3 3 0 0 4 0 2 2 Q点在三角形ABC内 */ /* 3 3 0 0 4 0 1 2 Q点不在三角形ABC内 */
相关文章推荐
- 绘制一个三角形和判断一个点是否在这个三角形中
- 判断三角形的性质
- (转)判断点是否在三角形内
- 判断是否是三角形
- 任意输入三个数判断其是否为三角形
- 判断点是否在三角形内
- 判断一个点是否在一个三角形内(平面)
- 判断点是否在三角形内 和 点是否在矩形内
- 其他题目---判断一个点是否在三角形内部
- HDU1756(判断点在多边形内外)
- 【C语言】判断三角形形状
- 1000个点随机选三个,判断其他点是不是在三角形内部----Python面试题
- 九度 OJ 1048:判断三角形类型
- NYOJ 659 判断三角形【简单题】
- 判断一个点是否在三角形内
- 1.按要求输入内容(scanf和printf的使用)2.求两个数的和(sum=a+b;) 3.求三角形的面积 4.BMI测试仪(if语句的判断)
- java--判断三角形
- 控制台输入三条边长,判断是否能构成三角形。如果能构成,输出三角形的周长,并且告知该三角形是什么类型(锐角、直角、钝角),再判断下该三角形是 等腰、等边还是不等边三角形。
- 第五周 三角形内联函数实现 并且判断是否能构成三角形
- 判断a,b,c的值能否构成一个三角形