高分请教算法高手!不够再加!!

apcad 2004-03-26 05:45:28
在x-y坐标系上,现给出任意一闭合直线段轮廓线(线段数大于3,各线段坐标值已知),以及任意一点坐标,判断该点是否位于该闭合曲线内?
1:线段数量较大,谁给出最优的算法?或者参考资料等?
...全文
42 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
apcad 2004-03-28
  • 打赏
  • 举报
回复
非常感谢各位!结贴!
微星1234 2004-03-26
  • 打赏
  • 举报
回复
sorry 几个字打错了.
"夺"->"多"
"现"->"线"
微星1234 2004-03-26
  • 打赏
  • 举报
回复
算法很简单, 在夺得点也就在O(n)时间内完成!
设要判断的点(x,y)
设封闭图形的端点为(x1,y1)->(xn,yn)
则所有线段为(x1,y1)-(x2,y2),(x1,y1)-(x2,y2),(x1,y1)-(x2,y2),.........,(xn,yn)-(x1,y1)

在(x,y)的横向,判断多少现在他右面,多少现在左面,如果出现仍何一面有偶数,那么肯定在图形外,纵向也是一样,当都是奇数时就在里面。如果计算过程中算出点在图形边界上时就马上可以终止算法了。
计算过程中要使用一点技巧, 就是当(x,y)和某点有相同的x坐标或y坐标时,让其中序号大的线段的起点为开点。例如:x=xi时则看成(Xi,Yi)属于线段(Xi-1,Yi-1)-(Xi,Yi)而不属于(Xi,Yi)-(Xi+1,Yi+1)。
程序实现相当简单。唯一的不同就是(x,y)和某两点获两点以上在横向或纵向在同一直线上时的处理,只要将这些点作微小的移动就行了,做比例万分之一的移动就可以达到目的(因为点不在轮廓上,如果在轮廓上时就可以马上中断处理了)。
ohbaby 2004-03-26
  • 打赏
  • 举报
回复
http://www.frontfree.net/view/article_748.html#判断点是否在多边形中
寻开心 2004-03-26
  • 打赏
  • 举报
回复
计算几何的基本问题
这种算法的速度很高的,除非你的多边形变数有几千条,否则很快的
http://www.gameres.com/Articles/Program/Abstract/Geometry.htm#判断点是否在多边形中
huanyun 2004-03-26
  • 打赏
  • 举报
回复
过点按 x(或者y)方向直线扫描,
统计与边界线段的交点数目 若为偶数个交点就在外否则在内
如果是凸图形 比较简单
可能相交边界线段的确定 找与点下x方向(或者y方向)最近的四个点
根据这四个点的y坐标判断确定
如果是凹图形 就要遍历了
gogo1979 2004-03-26
  • 打赏
  • 举报
回复
好像凹多变形何凸多边形有很大不同。
你有没有限制?
howtotell 2004-03-26
  • 打赏
  • 举报
回复

void CTestView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
int px,py;
px=point.x+GetScrollPos(SB_HORZ);
py=point.y+GetScrollPos(SB_VERT);
HRGN hrgn;
POINT lpPoint[4];//保存断点坐标

lpPoint[0].x=0;
lpPoint[0].y=0;

lpPoint[1].x=0;
lpPoint[1].y=200;

lpPoint[2].x=200;
lpPoint[2].y=0;

lpPoint[3].x=200;
lpPoint[3].y=200;

lpPoint[4].x=210;
lpPoint[4].y=10;


hrgn=CreatePolygonRgn(lpPoint,5,ALTERNATE);//第二个参数要是端点个数
CBrush m_brush;
m_brush.CreateSolidBrush(0xff8800);
::FillRgn(GetDC()->GetSafeHdc(),hrgn,m_brush);


if(PtInRegion(hrgn,px,py))
{
MessageBox("");
}

CFormView::OnLButtonDblClk(nFlags, point);
}
icenl 2004-03-26
  • 打赏
  • 举报
回复
一个线性归化问题, 看一看这方面的书有没有

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧