【判断一点P是否在三角形ABC内部】

**题目:**判断一点P是否在三角形ABC内部

思路:运用面积法,若点P在三角形ABC内部,则SABC = SAPC + SABP +SBCP
算法如下:

#include <iostream>
#include <math.h>
using namespace std;
define ABS_FLOAT_0 0.001;

struct point_float{
  float x;
  float y;
};

float GetTriangelSquar(const point_float pt0, const point_float pt1, const point_float pt2){
 point_float AB, BC;
 
 AB.x = pt1.x - pt0.x;
 AB.y = pt1.y - pt0.y;
 BC.x = pt2.x - pt1.x;
 BC.y = pt2.y - pt1.y;
 
 return fabs((AB.x*BC.y - AB.y*BC.x))/2.0f;
};

bool IsInTriangel(const point_float A, const point_float B, const point_float C, const point_float D){
  SABC = GetTriangelSquar(A, B, C);
  SABD = GetTriangelSquar(A, B, D);
  SADC = GetTriangelSquar(A, D, C);
  SBCD = GetTriangelSquar(B, C, D);

  float SumSquar = SABD + SADC + SBCD;
  
  if(((SABC - SumSquar)<ABS_FLOAT_0)&&((SumSquar - SABC) < ABS_FLOAT_0))
{
  return true;
}
else {
return false;
}
}

笔记:

  1. 运用向量叉乘来计算三角形的面积(结果为三角形面积的两倍,所以需要除以2);
  2. fabs()的作用是取绝对值;
  3. std定义C++标准程序库标识符;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值