我在控制台中旋转了一个正方形,但是我得到了一些洞。我怎样才能正确填写?
#include <stdio.h>
#include <Windows.h>
#include <math.h>
void moveTo (int x, int y)
{
COORD coord = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
double round (double number)
{
return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}
double deg2rad (double a)
{
double pi = 3.14159265358979323846;
return a * pi / 180.0;
}
int main ()
{
int w = 8;
int h = 8;
int cx = 20;
int cy = 10;
double a = 0;
while (1)
{
system("cls");
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
double xx = x - 4;
double yy = y - 4;
double fx = xx * cos(a) - yy * sin(a);
double fy = xx * sin(a) + yy * cos(a);
int ix = cx + round(fx);
int iy = cy + round(fy);
moveTo(ix, iy);
printf("X");
}
}
a += deg2rad(15.0);
Sleep(100);
}
return 0;
}
答案 0 :(得分:1)
不是真正的答案
显然,您的代码将始终在屏幕上打印相同数量的X
,即使情况可能并非如此。
我认为你不应该重新计算每个预定义X
的位置,而是计算方形周围线条的几何形状,并用X
s填充空间,直到需要为止。它撞到了对面的边界或什么的。
另一种解决方案可能是将广场的“密度”加倍:
int w = 8*2;
int h = 8*2;
int cx = 20*2;
int cy = 10*2;
...
moveTo(ix/2, iy/2);
这应该会打印一些点,但也应填补空白。