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

如图,内部交叉点共计5个,请问如何通过该五边形的顶点位置坐标来计算内部交叉点位置的坐标。
搜索更多相关主题的帖子: 多边形 位置 计算 坐标 内部 
2020-07-27 08:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
是要 求两个线段交点 的代码吗?
2020-07-27 11:08
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
得分:0 
两点确定一个线段,求两个线段的交叉点就行了

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2020-07-27 11:32
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
回复 2楼 rjsp
是的,就是这个意思。
2020-07-27 13:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 自学的数学
网上搜的:https://www.
2020-07-28 08:47
自学的数学
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
slbos
Rank: 2
等 级:论坛游民
威 望:2
帖 子:26
专家分:64
注 册:2021-3-20
得分:0 
唉代码的尽头是数学。。。
2021-04-10 11:55
slbos
Rank: 2
等 级:论坛游民
威 望:2
帖 子:26
专家分:64
注 册:2021-3-20
得分:0 
建议翻一翻高中数学的解析几何,记得应该有求这个的公式
2021-04-10 11:57



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




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

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