解题思路:
  根据点P与三角形其中两点所形成的三角形面积之和与三角形ABC面积进行比较,如果相等则点P在三角形内,不相等则不在三角形ABC内。
解题步骤:
  一、根据给定的三点坐标计算三角形的面积;
  二、将点P所形成的的三角形面积之和与三角形ABC进行比较,相等则说明点P在三角形ABC内,反之则不在三角形ABC内。
步骤分析:
  根据给定的三点坐标计算三角形的面积

  如上图所示,给定abc三点在坐标系中围成一个三角形
  三角形abc的面积可以用公式s = 1/2 * (ac * bd) = 1/2 * (ac * ab * sinΘ)
  ac和ab长度相当于向量ac和ab的模,为了方便表达,向量ac(c1 - a1, c2 - a2)记为ac(ac1, ac2),向量ab(b1 - a1, b2 - a2)记为ab(ab1, ab2)。
  那么上面的公式就可以转换为

  注:4式转5式中的向量的乘积相当于两个向量之间x与y坐标相乘的推导如下
  计算向量ab和向量ac的乘积,向量ab(x1, y1),向量ac(x2, y2)。现在假设两个x和y的单位向量i(1,0),j(0, 1)。
  那么向量ab可以表示为ab(x1 * i,y1 * j),向量ac可表示为ac(x2 * i, y2 * j)。
  那么向量ab和ac的乘积就相当于x1x2i^2 + x1y2ij + x2y1ij + y1y2j^2 = x1x2 + y1y2。
  由上面推导可知,根据给定三点的坐标,所得的三角形的面积为
  s = 1/2 * (|(c1 - a1) * (b2 - a2) - (c2 - a2) * (b1 - a1)|)。
  将点P所形成的三角形面积之和与三角形ABC进行比较
  分别用上面推导出来的公式计算各个三角形的面积,然后再进行判断。
  注意:计算的结果应当以浮点数储存,以及比较的时候要以浮点数的比较方式进行比较。

实现代码:
//浮点数零值
#define ABS_FLOAT_0 0.000001

//点的结构体
struct point
{
  float x;
  float y;
};

//计算三角形面积

float cal_area(const struct point1, const struct point2, const struct point3)
{
  struct point ab, ac;
  
  ab.x = point2.x - point1.x;
  ab.y = point2.y - point1.y;
  ac.x = point3.x - point1.x;
  ac.y = point3.y - point1.y;
  
  return fabs(ab.x * ac.y - ab.y * ac.x) / 2.0f;
}

//判断
bool is_in(const point a, const point b, const point c, const point d)
{
  float SABC, SADB, SBDC, SADC;
  SABC = cal_area(a, b, c);
  SADB = cal_area(a, d, b);
  SADC = cal_area(a, d, c);
  SBDC = cal_area(b, d, c);
  
  float sum_area = SADB + SADC + SBDC;
  
  if((-ABS_FLOAT_0 < SABC - sum_area) && ((SABC - sum_area) < ABS_FLOAT_0))
    return true;
  else
    return false;
}

给定三角形ABC和一点P(x, y),判断P是否在三角形内相关推荐

  1. 给定三角形 ABC 和一点 P(x,y,z),判断点 P 是否在 ABC 内,给出思路并手写代码

    三角形面积 根据面积法,如果 P 在三角形 ABC 内,那么三角形 ABP 的面积+三角形 BCP 的面积+三角形 话不多说了,直接上代码 根据面积法,如果 P 在三角形 ABC 内,那么三角形 AB ...

  2. 牛客C++面经——给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内

    目录 思路: 计算面积的方法:海伦公式 注意: 代码: 参考:

  3. 用python输入三个整数判断能否构成三角形_输入3个整数,判断是否能构成三角形,c语言编程...

    展开全部 可以根据数学公式进行判断. 一.数学定理. 要构成三角636f70793231313335323631343130323136353331333363373735形,必须要任意两边和大于第三 ...

  4. python输入三角形的三条边、判断能否构成三角形_输入三角形三条边a,b,c,判断他们能否构成三角形...

    #include int main() { int a,b,c; printf("输入三角形的三条边:\n"); while(scanf("%d%d%d",&a ...

  5. C语言编程,给出三角形三个边的边长,判断是否能构成三角形。

    #include<stdio.h> main() {float a,b,c; printf("请输入三个边长\n"); scanf("%f%f%f" ...

  6. 输入三角形的三条边,先判断是否可以构成三角形,如果可以,则进一步求三角形的周长和面积,否则报错“无法构成三角形!”

    import math a=int(input("第一条边:")) b=int(input("第二条边:")) c=int(input("第三条边:& ...

  7. 判断点是否在三角形内

    本文只是翻译和整理,原文在此http://www.blackpawn.com/texts/pointinpoly/default.html 概述 给定三角形ABC和一点P(x,y,z),判断点P是否在 ...

  8. 判断点是否在三角形内部

    判断点是否在三角形内部 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内.这是游戏设计中一个常见的问题.需要注意的是,这里假定点和三角形位于同一个平面内. 内角和法 连接点P和三角形的三 ...

  9. 判断一个点在三角形内

    http://www.gimoo.net/t/1505/5557e812d7390.html 判断点是否在三角形内 本文只是翻译和整理,原文在此http://www.blackpawn.com/tex ...

最新文章

  1. 面试这么多人,发现越是没本事的人,自尊心越强
  2. 在python中查看关键字需要在python解释器中执行_现有代码 d={},在Python3解释器中执行 d[([1,2])] = 'b'得到的结果为( )。...
  3. 理解这几张图,你就是js小牛了
  4. activity 生命周期_从0系统学Android-2.4 Activity 的生命周期
  5. 微软总裁比尔.盖茨给即将走出学校、踏入社会的青年一代下列11点忠告
  6. 【LeetCode】【HOT】102. 二叉树的层序遍历(队列)
  7. 让程序员爱不释手的两个导航网站
  8. Axure RP 8 最新注册码
  9. 微型计算机主板usb电源损坏,自已动手彻底解决主板USB供电不足的问题
  10. 证明费马最后定理的英国数学家,终获2016阿贝尔奖
  11. 采用Eclipse为IDE,设计一个Java程序,实现根据指定年份、月份计算该月天数的功能,即程序输入为年、月,输出为该月的天数。
  12. Ubuntu20.04 安装谷歌拼音(googlepinyin)输入法
  13. ChatGPT的悄然问世,让原先“吃香”的10种“铁饭碗”快要端不住了:软件技术类、新闻媒体类、法律工作类、市场研究分析师、教师、金融分析类、交易员、平面设计师、会计师、客服人员。
  14. 一文全懂,Android程序员最新职业规划
  15. 萨贾德·阿里提供黑魔法服务
  16. Swiper轮播图插件之如何修改前进后退按钮swiper-button-prev和swiper-button-next的默认样式
  17. 托福高频真词List01 // 附阅读真题
  18. 点击run无响应的解决办法
  19. 使用 Zap 和 W3af 进行 Web 应用程序漏洞评估
  20. HTML5期末大作业:在线电影网站设计——网上电影票预订网站 HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. 2018 acm-icpc南京站 复盘
  2. SQL语句中Cast的用法
  3. 【学习笔记】Node.js Buffer(缓冲区)和Stream流的关系
  4. 机器学习中线性函数与非线性函数的区别
  5. 小程序滚动里面catchtap事件苹果手机使用无效
  6. Bright Data VPN和ClonBrowser:如何通过全球VPN网络保护你的在线隐私和安全?
  7. 时间序列分析之holtwinters和ARIMA
  8. 机房收费系统——日账单
  9. Java001 了解JRE、JDK以及JDK版本
  10. matlab 结构体查询,Matlab 结构体