我有這個家庭作業,我有點卡住它。創建n個隨機點並創建四邊形(卡住)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);
}
「如何連接我的觀點」既模糊和寬泛。 「電腦」不需要連接點。你只需要某種數據結構來存儲正確的數據來表示形狀。例如,你可以有一個有序的x,y座標的列表。還有很多其他的方法。或者,您可能會問,如何首先找到兩個四邊形的點。請澄清你的問題 - 這太不清楚了。 – kaylum
雖然您的程序不需要生成圖形輸出,但手動操作幾個圖形示例可能會讓您對程序如何選擇點有所瞭解。 –
然而,我自己想到了一些關於這個問題的信息,我沒有理由相信有任何方法可以從你的隨機集合中選擇一些點作爲兩個四邊形的頂點,這些四邊形單獨或共同覆蓋所有剩餘的點。如果你有理由有不同的想法,那麼你可能已經提出了一個選擇算法,或者至少有一個定理證明了如何去做。 –