問題是:給定第一行上畫布(換句話說,二維數組)的高度(h)和寬度(w);並且中心(x,y)和圓的半徑(r)的座標將打印畫布。如果二維數組的元素在圓圈內,則打印#
,否則打印.
。下面是我嘗試過的,但對於我的生活,我無法弄清楚爲什麼2D矩陣只包含.
s。請拋出一些光:打印矩陣
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
typedef struct point {
int x;
int y;
} point;
float distance(point p, point q) {
return sqrt((p.x - q.x)*(p.x - q.x) + (p.y - q.y)*(p.y - q.y));
}
int withinCircle(point circleCentre, point p, int radius) {
float dist = distance(circleCentre, p);
if (!(dist > (float) radius)) {
return 1;
} else {
return 0;
}
}
int main(void){
point pixel;
int w, h;
scanf("%d %d",&w,&h);
char *canvas = malloc(w * h);
int circleX, circleY;
int r;
scanf("%d %d %d",&circleX,&circleY,&r);
point circleCentre;
circleCentre.x = circleX; circleCentre.y = circleY;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
pixel.x = j; pixel.y = i;
if (withinCircle(circleCentre, pixel, r)) {
*(canvas + i + j) = '#';
} else {
*(canvas + i + j) = '.';
}
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
printf("%c", *(canvas + i + j));
}
printf("\n");
}
return 0;
}
輸出(20和16是所述寬度(w)和分別高度(h)9,6和5是圓的X座標(X)中,Y座標。 (y)和半徑(r)):
20 16
9 6 5
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
一個固定的現場演示,你在哪裏打印傳單W ,你的代碼中的h,x,y和r?或者這只是一個假設,這些價值真的在那裏?因爲你讓它看起來像印刷品。 –
'*(canvas + i + j)'---->'*(canvas + j +(i * w))'....'i'必須是行寬的倍數 – LPs