给定n个点坐标,这n个点依次围成一比和多边形,再给一点(x,y),判断它是否再多边形中

C语言编程 高手帮忙下,谢谢啦

给你说下思路吧
个人意见

1。构造函数max和min,分别比较所给出的坐标中,x及y的最大值和最小值
2。判断,若给出的那一点满足:x最小值< x < x最大值,且y最小值< y < y最大值,则可确定此点在多边形内,否则不在。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-01-13
如果是凹多边形呢
你的判断条件就不合适了
第2个回答  2008-01-14
#include <stdio.h>
#include <stdlib.h>

int x,y,x1,y1,x2,y2;

int do_test()
{
int a=(y1-y2);
int b=(x2-x1);
int c=(x1*y2-x2*y1);
int d;

if (y1==y2)
{
return 0;
}

if (((y<=y1)&&(y<=y2))||((y>=y1)&&(y>=y2)))
{
return 0;
}

d=a*x+b*y+c;

if ((d==0)||((d>0)&&(a<0))||((d<0)&&(a>0)))
{
return 0;
}

return (y1<y2)?1:-1;
}

int main(int argc, char *argv[])
{
int x0,y0;
int count;
int i;

if ((argc<9)||((argc&1)==0))
{
printf("usage:%s x y x0 y0 ... xn yn \n", argv[0]);
return -1;
}

x=atoi(argv[1]);
y=atoi(argv[2]);

x0=x1=atoi(argv[3]);
y0=y1=atoi(argv[4]);

count=0;

for (i=5; i<argc-1; i+=2)
{
x2=atoi(argv[i+0]);
y2=atoi(argv[i+1]);

count += do_test();

x1=x2;
y1=y2;
}

x2=x0;
y2=y0;

count += do_test();

printf("%sDOOR\n", (count!=0)?"IN":"OUT");

return (count!=0);
}

...闭合多边形,再给一点(x,y),判断它是否在多边形中
double px[MAX_POINT], py[MAX_POINT]; \/\/n个点的坐标int n;double x, y;\/\/输入n个点和,x,yvoid input(){ int i; printf("Input n: \\n"); scanf("%d", &n); printf("Input %d points's coordinate: \\n", n); for (i = 0; i < n; i++) scanf("%lf %lf", px + i, py ...

...闭合多边形,再给一点(x,y),判断它是否在多边形中
参数说明:nvert: 多边形的顶点数 vertx, verty: 顶点X坐标和Y坐标分别组成的数组 testx, testy: 需要测试的点的X坐标和Y坐标

C语言程序,输入N个点的坐标,判断能否构成凸多边形
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1, x2,…, xm>,则另一序列Z=<z1, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列 ,使得对于所有j=1,2,…,k有 解答如下: a) 最长公共子序列的结构 若用穷举搜索法,耗时太长,算法需要指数时间。 易证...

初一数学题
11、已知一个多边形的内角和与外角和共2160°,则这个多边形的边数是___. 12、将点A先向下平移3个单位,再向右平移2个单位后,则得到点B( 2,5),则点A的坐标为 . 13、已知一个多边形的每一个外角都相等,且内角和是外角和的2倍,则它的每个外角等于一、填空题(每题1.5分,共15分) 1:直线外一点 ,叫做点...

如何在EXCEL中输入多个点坐标值,然后计算这些点连成的多边形的面积?
假设有n个角点,坐标分别为 (X1,Y1)……(Xn,Yn) 那角点依次连线围成的面积就是 S=((X2-X1)* (Y2+Y1)+(X2-X2)* (Y3+Y2)+(X4-X3)* (Y4+Y3)+……+(Xn-Xn-1)* (Yn+Yn-1)+(X1-Xn)* (Y1+Yn))\/2 ,计算结果的绝对值便是面积。你用EXCEL按以上公式输入各...

关于等比定律,如图
26 斜边、直角边公理(hl) 有斜边和一条直角边对应相等的两个直角三角形全等 27 定理1 在角的平分线上的点到这个角的两边的距离相等 28 定理2 到一个角的两边的距离相同的点,在这个角的平分线上 29 角的平分线是到角的两边距离相等的所有点的集合 30 等腰三角形的性质定理 等腰三角形的两个底角相等...

初中数学学习口诀,有知道的告一下,谢谢
最简根式的条件:最简根式三条件,号内不把分母含,幂指(数)根指(数)要互质,幂指比根指小一点。 特殊点坐标特征:坐标平面点(x,y),横在前来纵在后;(+,+),(-,+),(-,-)和(+,-),四个象限分前后;X轴上y为0,x为0在Y轴。 象限角的平分线:象限角的平分线,坐标特征有特点,一、三横纵都相等,二、...

n个数围成一圈,每次操作把其中某一个数换成这个数依次加上相邻的两...
(1)(2)不能.因为不管如何操作,变换后的4个数仍然除4余2,不可能出现0.(3)不能.如果3个奇数2个偶数的圈能变出5个奇数,由于这个操作的过程是可逆的,则5个奇数的圈通过有限次操作后能变成3个奇数2个偶数,但不管如何操作,5个奇数的圈变换后仍然是5个奇数,故要求的变换不能实现.

vb 给定16个点,确定外围点连成的图形
Public Declare Function PtInRegion Lib "gdi32" Alias "PtInRegion" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long 用这个函数可以判断一个点是否在一个区域内 你需要先知道外围有那几个点,画成多边形,得到该区域的hRgn ...

数学小知识一问一答
(九)一个因数是两位数的乘法法则1、先用两位数个位上的数去乘另一个因数,得数的末位和两位数个位对齐;2、再用两位数的十位上的数去乘另一个因数,得数的末位和两位数十位对齐;3、然后把两次乘得的数加起来。(十)除数是两位数的除法法则1、从被除数高位起,先用除数试除被除数前两位,如果它比除数小,2...

相似回答
大家正在搜