蓝桥杯-每日刷题-022
2023-12-20 07:32:34
线段相交
一、题目要求
- 题目描述
输入线段AB、CD的两端点,判断两线段是否相交(包含端点)。 - 输入格式
有多组数据,每组数据两行,第一行四个整数,分别表示A、B两点坐标,第二行四个整数,分别表示C、D两点坐标。 - 输出格式
如果线段AB与线段CD相交,输出yes,否则输出no。 - 输入样例
0 1 1 1
1 0 2 1
1 0 2 1
0 1 2 0
0 0 0 1
1 0 0 0 - 输出样例
no
yes
yes
二、完整代码
#include<iostream>
std::string is(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
int d1, d2, d3, d4;
d1 = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);//向量AB * AC的叉积
d2 = (x2 - x1) * (y4 - y1) - (y2 - y1) * (x4 - x1);//AB * AD
d3 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);//CD * CA
d4 = (x4 - x3) * (y2 - y3) - (y4 - y3) * (x2 - x3);//CD * CB
if (std::max(x1, x2) < std::min(x3, x4) || std::max(x3, x4) < std::min(x1, x2)
|| std::max(y1, y2) < std::min(y3, y4) || std::max(y3, y4) < std::min(y1, y2))
return "no";
else if (d1 * d2 <= 0 && d3 * d4 <= 0)
return "yes";
else
return "no";
}
int main()
{
int x1, y1, x2, y2, x3, y3, x4, y4;
while (std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4)
{
std::cout << is(x1, y1, x2, y2, x3, y3, x4, y4) << std::endl;
}
return 0;
}
文章来源:https://blog.csdn.net/m0_63642416/article/details/135059610
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!