计算几何练习题——线段相交
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/16 04:57:37
计算几何练习题——线段相交
线段相交测试在计算几何中是经常用到的,给定线段P1P2(P1和P2是线段的两端点,且不重合)、P3P4(P3和P4是线段的两端点,且不重合),判断P1P2和P3P4是否相交.P1P2和P3P4不重合,即指只存在一个点P,它既落在P1P2上又落在P3P4上(含线段的端点).
Input
输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据
1
0 0 1 1
2 2 3 3
表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(1,1),P3(2,2),P4(3,3)
Output
判断每组数据中的线段P1P2和P3P4是否相交,如果相交输出YES,否则输出NO.每组数据输出占一行.
Sample Input
1
0 0 1 1
2 2 3 3
Sample Output
NO
哪里有错误哦
#include
using namespace std;
struct point
{
\x05double x,y;
};
int min(double a,double b) {
\x05return a < b a:b;
}
int max(double a,double b) {
\x05return a > b a:b;
}
int multi(point p1,point p2,point p0) { //计算叉乘与(p0)转向
\x05return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y);
}
int main()
{
\x05int n;
\x05point p1,p2,p3,p4;
\x05cin>>n;
\x05\x05while(n--)
\x05\x05{
\x05\x05\x05cin>>p1.x>>p1.y>>p2.x>>p2.y;
\x05\x05\x05cin>>p3.x>>p3.y>>p4.x>>p4.y;
\x05\x05\x05if(max(p1.x,p2.x)>=min(p3.x,p4.x)
\x05\x05\x05\x05&& max(p3.x,p4.x)>=min(p1.x,p2.x)
\x05\x05\x05\x05&& max(p1.y,p2.y)>=min(p3.y,p4.y)
\x05\x05\x05\x05&& max(p3.y,p4.y)>= min(p1.y,p2.y)
\x05\x05\x05\x05&& multi(p3,p2,p1)*multi(p2,p4,p1)>=0
\x05\x05\x05\x05&& multi(p1,p4,p3)*multi(p4,p2,p3)>=0
\x05\x05\x05\x05)
\x05\x05\x05\x05cout
线段相交测试在计算几何中是经常用到的,给定线段P1P2(P1和P2是线段的两端点,且不重合)、P3P4(P3和P4是线段的两端点,且不重合),判断P1P2和P3P4是否相交.P1P2和P3P4不重合,即指只存在一个点P,它既落在P1P2上又落在P3P4上(含线段的端点).
Input
输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据
1
0 0 1 1
2 2 3 3
表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(1,1),P3(2,2),P4(3,3)
Output
判断每组数据中的线段P1P2和P3P4是否相交,如果相交输出YES,否则输出NO.每组数据输出占一行.
Sample Input
1
0 0 1 1
2 2 3 3
Sample Output
NO
哪里有错误哦
#include
using namespace std;
struct point
{
\x05double x,y;
};
int min(double a,double b) {
\x05return a < b a:b;
}
int max(double a,double b) {
\x05return a > b a:b;
}
int multi(point p1,point p2,point p0) { //计算叉乘与(p0)转向
\x05return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y);
}
int main()
{
\x05int n;
\x05point p1,p2,p3,p4;
\x05cin>>n;
\x05\x05while(n--)
\x05\x05{
\x05\x05\x05cin>>p1.x>>p1.y>>p2.x>>p2.y;
\x05\x05\x05cin>>p3.x>>p3.y>>p4.x>>p4.y;
\x05\x05\x05if(max(p1.x,p2.x)>=min(p3.x,p4.x)
\x05\x05\x05\x05&& max(p3.x,p4.x)>=min(p1.x,p2.x)
\x05\x05\x05\x05&& max(p1.y,p2.y)>=min(p3.y,p4.y)
\x05\x05\x05\x05&& max(p3.y,p4.y)>= min(p1.y,p2.y)
\x05\x05\x05\x05&& multi(p3,p2,p1)*multi(p2,p4,p1)>=0
\x05\x05\x05\x05&& multi(p1,p4,p3)*multi(p4,p2,p3)>=0
\x05\x05\x05\x05)
\x05\x05\x05\x05cout
你这是编程序
Input
输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据
1
0 0 0 1
1 1 1 0
表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(0,1),P3(1,1),P4(1,0)
Output
判断每组数据中的线段P1P2和P3P4是否相交,如果相交输出YES,否则输出NO.每组数据输出占一行.
Sample Input
1
0 0 0 1
1 1 1 0
Sample Output
NO
试试 ,看可以吗?
再问: 是的啊 没错的哦 嘻嘻 线段的相交很是头痛……
再答: 是啊,进网站去求助吧,推荐你去编程网站:www.rupeng.com 里面有很多高手的!
Input
输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据
1
0 0 0 1
1 1 1 0
表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(0,1),P3(1,1),P4(1,0)
Output
判断每组数据中的线段P1P2和P3P4是否相交,如果相交输出YES,否则输出NO.每组数据输出占一行.
Sample Input
1
0 0 0 1
1 1 1 0
Sample Output
NO
试试 ,看可以吗?
再问: 是的啊 没错的哦 嘻嘻 线段的相交很是头痛……
再答: 是啊,进网站去求助吧,推荐你去编程网站:www.rupeng.com 里面有很多高手的!