三角形内一点对应的重心坐标
//计算位于三角形内部任意一点相对于三个顶点的重心坐标
bool GetBaryCoord(CVector3d *tri, const CVector3d& cp, CVector3d &bCoord)
{
CVector3d v0 = tri[0] - cp;
CVector3d v1 = tri[1] - cp;
CVector3d v2 = tri[2] - cp;
CVector3d va = tri[1] - tri[0];
CVector3d vb = tri[2] - tri[0];
double d = va.Dot(vb);
if (d > -EPSILON)
{
double r = v1.Dot(v2) / d;
double g = v0.Dot(v2) / d;
double b = v0.Dot(v1) / d;
bCoord.Set(r, g, b);
return true;
}
else
{
return false;
}
}
//还没有好好测试~~
可能会出点小问题
果然是写错了
//计算位于三角形内部任意一点相对于三个顶点的重心坐标
bool GetBaryCoord(CVector3d *tri, const CVector3d& cp, CVector3d &bCoord)
{
CVector3d v0 = tri[0] - cp;
CVector3d v1 = tri[1] - cp;
CVector3d v2 = tri[2] - cp;
CVector3d va = tri[1] - tri[0];
CVector3d vb = tri[2] - tri[0];
CVector3d vd = va.Cross(vb);
double lend = vd.Length();
CVector3d vr, vg, vvb;
double r, g, b;
if (lend > -EPSILON)
{
vr = v1.Cross(v2);
r = vr.Length() / lend;
vg = v0.Cross(v2);
g = vg.Length() / lend;
vvb = v0.Cross(v1);
b = vvb.Length() / lend;
bCoord.Set(r, g, b);
return true;
}
else
{
return false;
}
}
但是这个会不会是遇到数值上的问题呢?如何去避免?……
三角形内一点对应的重心坐标相关推荐
- 如何判断一点在三角形内
假定在右手坐标系中的三角形3点坐标为A,B,C,判断P是否在ABC之内 ( 主要来自 3D引擎研发QQ群(38224573 )的各位朋友的讨论 ,我仅仅算做个总结吧,特别感谢各位朋友的热情支持. ) ...
- 在unity向量空间内绘制几何(3):通过三角形重心坐标寻找三角形内任意点的位置
文章目录 1,三角形的重心坐标(面积坐标) 2,演示函数:随机选择网格上的一个三角形并计算一个随机重心坐标点最后返回它的相对位置坐标 3,演示函数:输入重心坐标与三个顶点位置,返回相对坐标 1,三角形 ...
- 判断某一点是否在三角形内
1.同向法 假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧.我们就利用这一点,但是如何判断一个点在线段的左侧还是右侧呢? ...
- 重心法-判断一点是否在三角形内
1. 叉乘(X) 详细定义可以参考:叉积定义. 在三维坐标系中,如果 a = (a1, a2, a3), b = (b1, b2, b3),那么a x b = (a2b3 - a3b2, a3b1 - ...
- 给定三角形ABC和一点P(x, y),判断P是否在三角形内
解题思路: 根据点P与三角形其中两点所形成的三角形面积之和与三角形ABC面积进行比较,如果相等则点P在三角形内,不相等则不在三角形ABC内. 解题步骤: 一.根据给定的三点坐标计算三角形的面积: 二. ...
- 判断点是否在三角形内
本文只是翻译和整理,原文在此http://www.blackpawn.com/texts/pointinpoly/default.html 概述 给定三角形ABC和一点P(x,y,z),判断点P是否在 ...
- Java 判断一个点是否在一个三角形内
题目描述: 如何判断一个点是否在一个三角形内. 测试样例: 自定义的POINT类: class POINT{int x;int y;public POINT(int x,int y){this.x ...
- 判断一个点在三角形内
http://www.gimoo.net/t/1505/5557e812d7390.html 判断点是否在三角形内 本文只是翻译和整理,原文在此http://www.blackpawn.com/tex ...
- 能否构成三角形的条件代码_Java 如何判断一个点是否在一个三角形内
题目描述: 如何判断一个点是否在一个三角形内. 测试样例: 自定义的POINT类: class POINT{ int x; int y; public POINT(int x,int y){ this ...
最新文章
- 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
- 《Adobe Photoshop CC经典教程(彩色版)》—第4课4.7节添加调整图层
- pandas 判断数据表中的缺失值
- java异常原则_有效处理Java异常三原则
- bin文件如何编辑_每日学习:Linux文件与目录管理常用命令解析
- 12个强大的Web服务测试工具
- spring(二)-反射、动态代理
- 蓝牙打印 设置打印样式_双编辑模式 打印自由更轻松!——海鸟贴纸打印机蓝牙按键版体验...
- 基于Bootstrap的后台通用模板
- java oracle11g jar_oracle11g驱动jar包下载
- Biopython -- SeqIO
- Android 联系人名字多音字的处理方法
- cadence Allegro17.2关闭start page 界面方法
- c#中HttpWebRequest使用Proxy实现指定IP的域名请求
- 使用grldr文件引导windows xp、ubuntu系统
- 53 pandas 时间序列-时区处理(tz_localize本地化tz_conver转换)(tcy)
- unsw计算机专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名新南威尔士大学排名第76-100...
- 以太坊中的nonce
- 项目启动成功,但是Eureka页面不显示
- android deb文件怎么打开,演示apk是什么文件?怎么打开apk文件呢?
热门文章
- Python中的bbox_overlaps()函数详解
- OSChina 周三乱弹 —— 请叫我马化喵
- springBoot项目中Graphics2D在linux上使用Font字体出现乱码或者中文字无法显示的问题
- 《灵飞经5·龙生九子》第二十三章 力压须眉(上)
- 清华大学孙茂松当选 2022 年度 ACL Fellow
- OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录
- 你知道企业级SSD与消费级SSD的区别吗?
- MATLAB-中文乱码问题解决
- 高等数学笔记-乐经良老师-第三章-导数和微分
- [Unity] 优化您的移动游戏性能2020(中)