标题:本人是小白菜,有个问题想请教大虾们.
只看楼主
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
得分:0 
给定点p;
*************************************************************
到如果从P作水平向左的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑。假如考虑边(P1,P2),
1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同,则直接忽略这种情况
2)如果射线水平,则射线要么与其无交点,要么有无数个,这种情况也直接忽略。
3)如果射线竖直,而P0的横坐标小于P1,P2的横坐标,则必然相交。
4)再判断相交之前,先判断P是否在边(P1,P2)的上面,如果在,则直接得出结论:P再多边形内部。
待会大家根据这个写个算法


Go Go Go
2010-12-20 21:39
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
得分:2 
#include<graphics.h>
main()
{
int graphdriver=DETECT;
int graphmode,d[1000],n,i,j,k,x,y;
initgraph(&graphdriver,&graphmode,"");
cleardevice();
scanf("%d",&n);
for(i=0;i<=2*n-1;i++)
scanf("%d",&d[i]);
scanf("%d %d",&j,&k);
cleardevice();
setcolor(2);
putpixel(j,k,4);
setfillstyle(1,5);
fillpoly(n,d);
x=getpixel(j,k);
if(x==4)
printf("no");
if(x==5)
printf("yes");
}
不知行不行
反正当输入三角形为(0 0 250 250 600 0)而点为(250 100)时输出了yes 点为(250 260)时输出了no

粗心是大敌
2010-12-20 21:45
jsyouxiwang
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:6
专家分:4
注 册:2010-12-20
得分:0 
求个程序运行下

没有最好,只有更好!
2010-12-21 18:56
王晓明
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2009-3-12
得分:2 
http://topic.
2010-12-21 19:27



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




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

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