【华为练习题】判断点是否在三角形中
2016-08-24 13:49
363 查看
【华为练习题】判断点是否在三角形中
题目
一个二维坐标系中(100*100,每一维0~99),已知三角形三个顶点的坐标A、B、C,判断坐标系中的任意点:P,是否在三角形内(在三角形边上也认为在三角形内)请实现如下接口
/* 功能:点是否在三角形内
输入:三角形三顶点坐标:A、B、C,以及待确认的点:P
输出:无
返回:在三角形内返回true,否则返回false
*/
public static boolean isInTriangle(POINTA, POINTB, POINTC, POINTP)
{
return true;
}
约束:
二维坐标系中(100*100,每一维0~99),接口传入4点坐标的合法性由调用者保证
分析
三角形PAB,PBC,PAC的面积之和等于ABC的面积,则可判断P在ABC中。解答
#include <iostream> using namespace std; class Point{ public: Point(double fx, double fy):x(fx),y(fy) {}; double x; double y; }; inline double dis(const Point &p1, const Point &p2){ return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } double area(const Point &a, const Point &b, const Point &c){ double ab = dis(a,b), ac = dis(a,c), bc = dis(b,c); double p = 0.5 * (ab + ac + bc); return sqrt(p * (p - ab) * (p - ac) * (p - bc)); } inline bool doubleEqual(double d1, double d2){ return abs(d1 - d2) < 0.000001; } bool isInTriangle(const Point &a, const Point &b, const Point &c, const Point &p){ return doubleEqual(area(a,b,c), area(p,a,b) + area(p,a,c) + area(p,b,c)); }
相关文章推荐
- 华为oj 之 判断点是否在三角形内
- 华为机试题:判断一个点是否在三角形内(java)
- [华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络
- 2D中判断点是否在某一三角形内算法
- 我要学C#语言程序设计【解题篇】(二):输入三个整数,判断是否能够组成三角形
- 2013华为杯编程大赛成都第三组试题--------C 连连看-判断两个图案是否可以消去
- 判断点是否在三角形内
- 华为练习题--社交好友判断
- 华为机试-判断两个IP是否属于同一个子网
- 从键盘输入三个整数,判断是否能构成三角形
- 一个判断点是否在三角形内的简单方法
- 判断点是否在三角形内[转]
- 华为OJ 初级:判断两个IP是否属于同一子网
- 华为oj_判断两个IP是否属于同一子网
- 判断平面上一点是否在三角形内 Inside a triangle or not
- 判断点是否在三角形内部
- HDU_2039——判断三条边是否能组成三角形
- 判断点是否在三角形中(三角形的有向积计算)
- 判断点P是否在三角形ABC内
- 判断三个数是否是直角三角形的三条边