三维线段相交判断 c++代码
时间: 2023-10-30 14:05:10 浏览: 109
下面是三维线段相交判断的c++代码,需要传入两条线段的起点和终点坐标:
```c++
bool isSegmentIntersected(Point3D a1, Point3D a2, Point3D b1, Point3D b2) {
Vector3D u = a2 - a1;
Vector3D v = b2 - b1;
Vector3D w = a1 - b1;
double d = dotProduct(u, v);
if (fabs(d) < EPSILON) {
return false;
}
double sI = dotProduct(crossProduct(v, w), crossProduct(u, v)) / (d * d);
double tI = dotProduct(crossProduct(u, w), crossProduct(u, v)) / (d * d);
return sI >= 0 && sI <= 1 && tI >= 0 && tI <= 1;
}
// 三维向量和点的定义
struct Vector3D {
double x, y, z;
Vector3D() {}
Vector3D(double x, double y, double z) : x(x), y(y), z(z) {}
};
struct Point3D {
double x, y, z;
Point3D() {}
Point3D(double x, double y, double z) : x(x), y(y), z(z) {}
Vector3D operator-(const Point3D& p) const {
return Vector3D(x - p.x, y - p.y, z - p.z);
}
};
// 三维向量的叉乘和点乘
Vector3D crossProduct(const Vector3D& u, const Vector3D& v) {
return Vector3D(u.y * v.z - u.z * v.y, u.z * v.x - u.x * v.z, u.x * v.y - u.y * v.x);
}
double dotProduct(const Vector3D& u, const Vector3D& v) {
return u.x * v.x + u.y * v.y + u.z * v.z;
}
```
代码中使用了三维向量和点的定义,以及向量的叉乘和点乘运算。函数返回值为布尔型,表示两条线段是否相交。
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)