标题:凸多边形对角线连线交叉点位置坐标的计算
取消只看楼主
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
 问题点数:0 回复次数:3 
凸多边形对角线连线交叉点位置坐标的计算
如何计算凸多边形内部交叉点位置的坐标?
比如(以凸五边形为例):假设这五边形的每个顶点的位置顺次为:
    X1:500,700
    X2:50,500
    X3:100,100
    X4:1000,100
    X5: 1100,500

如图,内部交叉点共计5个,请问如何通过该五边形的顶点位置坐标来计算内部交叉点位置的坐标。
搜索更多相关主题的帖子: 多边形 位置 计算 坐标 内部 
2020-07-27 08:49
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
回复 2楼 rjsp
是的,就是这个意思。
2020-07-27 13:19
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分: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;
  printf("%lf %lf\n",x,y);
  return 0;
}
2020-07-28 15:44
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
楼上的代码也太简单了,简单到将线段相交变成了直线相交,所以不对,因为线段是有端点的,比如,将如下两条线段画出来,它就明显不相交,只是它们所在的直线可以相交。
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编辑过]

2020-07-29 08:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502639-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022847 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved