判断两三角形是否相交

本文介绍如何判断两个三角形是否相交。基于点在三角形内的判断,如果三角形A的每个顶点都不在三角形B内,且三角形B的每个顶点也不在三角形A内,并且三角形A的每条边都不与三角形B相交,那么这两个三角形是相离的。提供相关代码实现。
摘要由CSDN通过智能技术生成

1,原理:在上篇文章中我们可以判断点是否在三角形内。这张判断两三角形是否相交,只需要判断三角形A的三个顶点不在三角形B内,三角形B的三个顶点不在三角形A则满足两三角形相离,并且判断三角形A的三条边与三角形B 都不想交

代码如下:

// test project main.go
package main

import (
	"fmt"
)

//坐标
type victor struct {
	X float32
	Y float32
}

func main() {
	//测试点
	pA1 := &victor{0, 0}
	pA2 := &victor{2, 0}
	pA3 := &victor{2, 2}
	pB1 := &victor{1.5, -1}
	pB2 := &victor{0, 1}
	pB3 := &victor{1.5, 2}
	IsCorssTriangle(pA1, pA2, pA3, pB1, pB2, pB3)

}

//判线段是否在三角形内
func IsCorssTriangle(pA1 *victor, pA2 *victor, pA3 *victor, pB1 *victor, pB2 *victor, pB3 *victor) bool {
	//比例系数(p1.X - p2.X) / (p1.Y - p2.Y)
	//C p1.Y-((p1.X - p2.X) / (p1.Y - p2.Y))*p1.X
	//IsTriangle判断是否是三角形
	if !IsTriangle(pA1, pA2, pA3) {
		fmt.Println("该三点不能组成三角形")
		return false
	}
	//IsTriangle判断是否是三角形
	if !IsTriangle(pB1, pB2, pB3) {
		fmt.Println("该三点不能组成三角形")
		retur
破片射线与三角形面元相交算法中,存在一种直接判断的方法,即Möller–Trumbore算法(M-T算法)[1][2。M-T算法通过射线与三角形相交检测来确定破片射线是否三角形面元相交。这个算法利用了射线与平面的相交检测以及射线和三角形相交检测。 具体来说,M-T算法使用了克莱姆法则和三矢量的混合积来判断射线和三角形相交情况。通过计算射线与三角形相交点,可以确定是否存在相交。该算法相比传统的求解方法更直接、更快速,并且适用于各种场景。 因此,使用Möller–Trumbore算法可以有效地判断破片射线与三角形面元是否相交。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【收藏好文】一文读懂射线与三角形相交算法Moller-Trumbore算法](https://blog.csdn.net/oakchina/article/details/124385464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [空间射线与三角形相交算法的种实现](https://blog.csdn.net/charlee44/article/details/104348131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值