怎样判断三角形的顶点是逆时针方向还是顺时针方向
给定空间三角形的三个顶点(a, b, c),把这三个顶点的x, y, z分量组成一个3X3的矩阵(行矩阵与列矩阵都行,因为它们的det相等),然后计算出这个矩阵的det值。
如果 det > 0, 表示这三点是逆时针方向;
如果 det = 0, 表示这三点共线;
如果 det < 0, 表示这三点呈顺时针方向。
代码如下:
//判断三角形顶点的方向。返回1表示顺时针,0表示三点共线,-1表示逆时针。int ccw(Point3f a, Point3f b, Point3f c){float m00 = a.x;float m01 = a.y;float m02 = a.z;float m10 = b.x;float m11 = b.y;float m12 = b.z;float m20 = c.x;float m21 = c.y;float m22 = c.z;// 计算det.float f =m00 * (m11 * m22 - m12 * m21)+ m01 * (m12 * m20 - m10 * m22)+ m02 * (m10 * m21 - m11 * m20);return f > 0 ? 1 : f < 0 ? -1 : 0;}
对于2维平面的三角形,可以简单的把z值设为0来计算。除此之外,还有一种更为简单的算法,算法描述如下:
1,用三角形顶点b减去顶点a,得到一个向量A;用顶点c减去顶点a,得到向量B,
也就是 A = b - a,B = c - a。
2,用向量A叉乘以向量B得要一个值t,也就是t = A × B,然后像判断det那样判断t值就能确定三个顶点的方向。
除此之外,t的值刚好等于这个平面三角形面积的2倍,因为t值有正负之分,所以用这种方法计算三角形面积
会有可能得到负值。
需要注意的是,2d向量原本是没有叉乘的。
代码如下:
// 2d向量的叉乘float crossProduct(Vector2f a, Vector2f b){float x1 = a.x, y1 = a.y;float x2 = b.x, y2 = b.y;return x1 * y2 - x2 * y1;}
// 计算三角形的面积,可能为负float triangleArea(Point2f a, Point2f b, Point2f c) {float x1 = a.x, y1 = a.y;float x2 = b.x, y2 = b.y;float x3 = c.x, y3 = c.y;return ((x1 - x2) * (y2 - y3) - (x2 - x3) * (y1 - y2)) * 0.5f;}
//判断三角形顶点的方向。返回1表示顺时针,0表示三点共线,-1表示逆时针。int ccw(Point2f a, Point2f b, Point2f c) {float ax = a.x, ay = a.y;float bx = b.x, by = b.y;float cx = c.x, cy = c.y;float v = (bx - ax) * (cy - ay) - (cx - ax) * (by - ay);return v < 0 ? -1 : v > 0 ? 1 : 0;}
怎样判断三角形的顶点是逆时针方向还是顺时针方向相关推荐
- C语言顺序结构程序设计——对调数字and判断三角形
最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...
- NYOJ 659 判断三角形
判断三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 小明非常喜欢研究三角形.现在,小明已经知道三角形的三条边,如果三条边能组成三角形,小明就会很高兴,他就会得到一 ...
- c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
根据输入的三角形的三边判断三角形的类型,并输出其面积和类型. #include #include #include int main() { float a, b, c; float s, area; ...
- php判断三角形类型,C#_C#判断三角形的类型,题目描述:
输入三角形的三 - phpStudy...
C#判断三角形的类型 题目描述: 输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为零的三角形),是什么样的三角形(直角.锐角.钝角.等边.等腰). 函数声明为:byte Ge ...
- C# 实验三 判断一个字符、判断三角形、千名学生、a+aa+aaa+aaaa、求数列相加、约瑟夫环
题目 以下为实现代码 1 判断一个字符 using System; using System.Collections.Generic; using System.Linq; using System. ...
- C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。
1. 题目 编写函数:判断三角形的类型,并输出其面积和类型. 2.思路: 首先判断其两边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积:否则不 ...
- java中直角三角形第三条边,Java编程,根据输入三角形的三个边边长,程序能判断三角形类型为:等边、等腰、斜角、直角三角形,求代码...
private static Scanner sc;private static int edge[] = new int[3];public static void main(String[] ar ...
- 7-8 判断三角形类型 (20 分)
** 7-8 判断三角形类型 (20 分) ** 输入三角形三条边,判断该三角形为什么类型的三角形. 输入格式: 在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的 ...
- C语言OJ项目参考(2963) 判断三角形
2963: 判断三角形 Description 娄月的妹妹刘月是个初中生,某天回来兴高采烈的回家告诉姐姐他学会了如何凭借三角形三边判断三角形的形状(设两条短边为啊a,b;长边为c,判断a*a+b*b和 ...
最新文章
- Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
- MySQL DATE_FORMATE函数内置字符集的坑
- 【 FPGA 】FIR滤波器之 Hilbert 变换的实现
- 解决eclipse+MAVEN提示One or more constraints have not been satisfied.的问题
- 解决Kali Linux 2020.1乱码问题
- python3中map()函数用法
- poj1743(后缀数组:最长不可重叠子串长度)
- Java SecurityManager checkPermission()方法与示例
- php MySQL定义,PHP + MySQL用户定义函数
- Atitit 如何在外包找到自己的技术深度
- EnableQ在线问卷调查引擎在学校教学教评中的作用
- VS Code 创建HTML页面教程
- 关于 chrome 上支付宝安全控件无法使用,以及检测不到数字证书的问题
- python 科学计算地磁_用Python控制硬件32-用HMC5883L测量地磁场强度
- 计算机cpu的字母,笔记本电脑CPU型号后缀字母HQ、U、Y含义详解
- 学习笔记MOOCM《计算机程序设计C++》第三周中级练习
- nvm 卸载详细流程
- 4 数据分析-案例:亚洲国家人口数据计算
- HTML5期末大作业:基于html企业官网项目的设计与实现【艺术官网】
- 优思学院|“丰田生产方式“和“福特生产方式”的区别
热门文章
- 文字转语音的配音软件,萝莉等语音资源可以自行编辑声音文本内容
- php后台模板怎么用,Phpwind9.0的后台模板安装与使用
- 用友U8 ERP恢复账套
- android通过百度语音合成实现文字转换成语音(TTS)详细教程?
- 岁寒,然后知松柏之后凋也。关于后凋的解释
- 为何要转换为GERBER文件交PCB厂制板
- 期末作业成品代码——威海影视(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- 电子工程师标配十款经典RF射频器件
- OA系统,企业的专属协同办公平台
- 破解Word密码保护的简单方法(转)