注册 登录
编程论坛 C语言论坛

凸多边形对角线连线交叉点位置坐标的计算

自学的数学 发布于 2020-07-27 08:49, 2563 次点击
如何计算凸多边形内部交叉点位置的坐标?
比如(以凸五边形为例):假设这五边形的每个顶点的位置顺次为:
    X1:500,700
    X2:50,500
    X3:100,100
    X4:1000,100
    X5: 1100,500
只有本站会员才能查看附件,请 登录

如图,内部交叉点共计5个,请问如何通过该五边形的顶点位置坐标来计算内部交叉点位置的坐标。
8 回复
#2
rjsp2020-07-27 11:08
是要 求两个线段交点 的代码吗?
#3
zhulei19782020-07-27 11:32
两点确定一个线段,求两个线段的交叉点就行了
#4
自学的数学2020-07-27 13:19
回复 2楼 rjsp
是的,就是这个意思。
#5
rjsp2020-07-28 08:47
回复 4楼 自学的数学
网上搜的:https://www.
#6
自学的数学2020-07-28 15:44
最简单的情形(两条线段线相交)的交点坐标代码如下:
程序代码:
#include<stdio.h>
int main()
{
  double x,y,x0,y0,x1,y1,x2,y2,x3,y3,k1,k2;
  scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x0,&y0,&x1,&y1,&x2,&y2,&x3,&y3);
  k1=(y0-y1)/(x0-x1);
  k2=(y2-y3)/(x2-x3);
  x=(k1*x0-k2*x2+y2-y0)/(k1-k2);
  y=y0+(x-x0)*k1;
  printf("%lf %lf\n",x,y);
  return 0;
}
#7
自学的数学2020-07-29 08:05
楼上的代码也太简单了,简单到将线段相交变成了直线相交,所以不对,因为线段是有端点的,比如,将如下两条线段画出来,它就明显不相交,只是它们所在的直线可以相交。
x0=1,y0=2,x1=9,y1=6,x2=3,y2=2,x3=5,y3=0;
因为通过计算,交点的位置是:X =2.333333 Y=2.666667
这里X和Y的值已经不在x2=3,y2=2,x3=5,y3=0的取值范围之列了。
修改如下就好了:
程序代码:
#include<stdio.h>
int main()
{
  double x,y,x0,y0,x1,y1,x2,y2,x3,y3,k1,k2;
  scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x0,&y0,&x1,&y1,&x2,&y2,&x3,&y3);
  k1=(y0-y1)/(x0-x1);
  k2=(y2-y3)/(x2-x3);
  x=(k1*x0-k2*x2+y2-y0)/(k1-k2);
  y=y0+(x-x0)*k1;
  if   ( (  ( (x>x0)&&(x<x1))&&( (y>y0)&&(y<y1)  )||( (x<x0)&&(x>x1))&&( (y<y0)&&(y>y1)  )    )&& (  ( (x>x2)&&(x<x3))&&( (y>y2)&&(y<y3)  )||( (x<x2)&&(x>x3))&&( (y<y2)&&(y>y3)  )    )  )
    {  printf("该两条线段相交\n");
       printf("%lf %lf\n",x,y);
    }
    else   printf("该两条线段不相交\n");
  return 0;
}


[此贴子已经被作者于2020-7-29 08:28编辑过]

#8
slbos2021-04-10 11:55
唉代码的尽头是数学。。。
#9
slbos2021-04-10 11:57
建议翻一翻高中数学的解析几何,记得应该有求这个的公式
1