qcode
  • 创作工场专业版,一问多答!更智能、更完整、更原创
  • 这是一个超强内容创作平台,它会写文章、做设计、绘图、敲代码,有问必答!
🔥点击使用-免登录深度版🔥

两个线段相交判断,cpp代码

时间2023-09-04 17:53:43 提问来自 上海市上海市 的网友 分类创作 浏览414
以下是一个用C++编写的判断两个线段是否相交的代码示例: ```cpp #include <iostream> struct Point { int x, y; }; // 判断两个线段是否相交 bool isIntersect(Point p1, Point q1, Point p2, Point q2) { // 通过叉积判断两个线段是否相交 int o1 = (q1.x - p1.x) * (p2.y - p1.y) - (p2.x - p1.x) * (q1.y - p1.y); int o2 = (q1.x - p1.x) * (q2.y - p1.y) - (q2.x - p1.x) * (q1.y - p1.y); int o3 = (q2.x - p2.x) * (p1.y - p2.y) - (p1.x - p2.x) * (q2.y - p2.y); int o4 = (q2.x - p2.x) * (q1.y - p2.y) - (q1.x - p2.x) * (q2.y - p2.y); // 如果两个线段的方向不同,则相交 if (o1 * o2 < 0 && o3 * o4 < 0) { return true; } // 如果两个线段共线且重叠,则相交 if (o1 == 0 && o2 == 0 && o3 == 0 && o4 == 0) { if ((p2.x >= p1.x && p2.x <= q1.x) || (p2.x <= p1.x && p2.x >= q1.x) || (q2.x >= p1.x && q2.x <= q1.x) || (q2.x <= p1.x && q2.x >= q1.x) || (p2.y >= p1.y && p2.y <= q1.y) || (p2.y <= p1.y && p2.y >= q1.y) || (q2.y >= p1.y && q2.y <= q1.y) || (q2.y <= p1.y && q2.y >= q1.y)) { return true; } } return false; } int main() { Point p1 = {1, 1}; Point q1 = {10, 1}; Point p2 = {1, 2}; Point q2 = {10, 2}; if (isIntersect(p1, q1, p2, q2)) { std::cout << "线段相交" << std::endl; } else { std::cout << "线段不相交" << std::endl; } return 0; } ``` 这段代码定义了一个`Point`结构体表示点的坐标,然后使用`isIntersect`函数判断两个线段是否相交。函数内部通过计算叉积的方式判断线段的方向,如果两个线段的方向不同,则相交;如果两个线段共线且重叠,则相交。最后在`main`函数中调用`isIntersect`函数进行测试,并输出结果。

不满意?免费深度重写!

免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。

上一篇 小红书的top5行业有哪些,可以通过哪些学习通道和方式来提升小红书广告运营能力 下一篇 坐在火车上能写一首七言绝句吗