创建n个随机点并创建四边形(卡住)C

时间:2017-01-16 19:52:29

标签: c

我有这个家庭作业,我有点困惑。

  

创建n个随机点,使用这些点创建2个四边形,包围其余的点,并比较2个形状的区域。(不是图形解决方案,纯数学)

我无法弄清楚如何连接我的点或如何告诉计算机哪些点连接。我想也许找到最大和最小X和Y可以工作,但我没有比这更进一步。

谢谢你提前!

void genp(int n,int** x,int** y);
void rectangle(int n,int** x,int** y);
void file(int n, int** x, int** y);

int main()
{
    int n;
    printf("Please specify number of points!\n");
    scanf("%d", &n);
    int *x;
    int *y;
    genp(n,&x,&y);
    for (int i = 0; i < n; i++)
    {
        printf("x[%d]=%d\ty[%d]=%d\n", i, x[i], i, y[i]);
    }
    rectangle(n,&x,&y);
    file(n,&x,&y);
    free(x);
    free(y);
    return 0;
}

void genp(int n,int** x, int** y)
{
    int r;
    srand(time(NULL)); 
    *x = (int*)malloc(n * sizeof(int));
    *y = (int*)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++)
    {
        r = rand();
        (*x)[i] = r;
        r = rand();
        (*y)[i] = r;
    }
}

void rectangle(int n,int** x,int **y)
{
    int maxlocx,maxlocy,maxx,maxy,minx,miny,minlocx,minlocy;
    int zerox=*x[0];
    int zeroy=*y[0];
    for(int i=0;i<n;i++)
    {
        if ((*x)[i]>zerox)
        {
            maxx=(*x)[i];
            maxlocx=i;
        }
        if ((*y)[i]>zeroy)
        {
            maxy=(*y)[i];
            maxlocy=i;
        }
    }
    for (int i=0;i<n;i++)
    {
        if ((*x)[i]<zerox)
        {
            minx=(*x)[i];
            minlocx=i;
        }
        if ((*y)[i]<zeroy)
        {
            miny=(*y)[i];
            minlocy=i;
        }
    }
    printf("\nThe max x:%d, corresponding y:%d\n",maxx,(*y)[maxlocx]);
    printf("\nThe max y:%d, corresponding x:%d\n",maxy,(*x)[maxlocy]);
    printf("\nThe min x:%d, corresponding y:%d\n",minx,(*y)[minlocx]);
    printf("\nThe min y:%d, corresponding x:%d\n",miny,(*x)[minlocy]);

    int area=
}

void file(int n,int** x,int** y)
{
    FILE *f;
    f=fopen("data.txt","w");
    fprintf(f,"n=%d\n",n);
    for (int i=0;i<n;i++)
    {
        fprintf(f,"%d,%d\n",(*x)[i],(*y)[i]);
    }
    fclose(f);
}

1 个答案:

答案 0 :(得分:0)

  

我在想也许找到最大和最小的X和Y可以工作,但我没有比这更进一步。

这听起来对我来说是正确的,这是我在阅读该问题陈述时首先想到的。

enter image description here

对于第二个四边形,也许你可以做一些事情,比如试图找到一个带有倾斜轴而不是轴的边界矩形,它们是X轴和Y轴的平行线。例如,倾斜度为45度时,边界框将如下所示:

enter image description here

  

我无法弄清楚如何连接我的点或如何告诉计算机哪些点连接。

我得到的印象是你试图找到你的一组点的Convex Hull。这比找到一个边界框要困难得多。 (无论如何它可能不是四边形)

enter image description here