【问题标题】:Rotating a polygon around its center in c++在c ++中围绕其中心旋转多边形
【发布时间】:2017-01-11 04:15:08
【问题描述】:

我想在 C++ 中围绕它的中心旋转一个多边形。

我想要一个围绕其中心旋转的多边形,而不是旋转的结果。

但结果是旋转的多边形。

我的代码如下:

double pi = atan(1) * 4;
double radian = 180 / pi;
int N = 1;
double angle = radian * (N % 10);
double Sin = sin(angle);
double Cos = cos(angle);

int Radius = 60;
int xC = 256;
int yC = 256;

for (int i = 0; i < 10; i++) {
    for (int k = 0; k < 10; k++) {
        Draw1Dot(256+i, 256+k, 0.2f, 0.7f, 0.7f);
    }
}

time_t start, end;
DrawCircle(Radius, xC, yC, Sin, Cos);

do {

    time(&start);
    end = start;

    while (end - start != 3) {
        void clear();
        N++;
        time(&end);
        DrawCircle(Radius, xC, yC, Sin, Cos);
    }
} while (N == 10);

我的目标是随着 N 的增加,圆围绕其中心旋转。

我使用 Sleep() 函数来获得平滑的移动效果。

-编辑-

有人想看 DrawCircle() 函数。

那个函数只是画圆,我就不写了。

绘图代码如下:

int Check = 1 - Radius;
int x = 0;
int y = Radius;

//circle edge drawing code
Draw1Dot(xC + x + (Radius * Cos), yC + y + (Radius * Sin), 1.f, 1.f, 1.f);      //1
Draw1Dot(yC + y + (Radius * Cos), xC + x + (Radius * Sin), 1.f, 1.f, 1.f);      //2
Draw1Dot(yC + y + (Radius * Cos), xC - x + (Radius * Sin), 1.f, 1.f, 1.f);      //3
Draw1Dot(xC + x + (Radius * Cos), yC - y + (Radius * Sin), 1.f, 1.f, 1.f);      //4
Draw1Dot(xC - x + (Radius * Cos), yC - y + (Radius * Sin), 1.f, 1.f, 1.f);      //5
Draw1Dot(yC - y + (Radius * Cos), xC - x + (Radius * Sin), 1.f, 1.f, 1.f);      //6
Draw1Dot(yC - y + (Radius * Cos), xC + x + (Radius * Sin), 1.f, 1.f, 1.f);      //7
Draw1Dot(xC - x + (Radius * Cos), yC + y + (Radius * Sin), 1.f, 1.f, 1.f);      //8

while (x <= y) {
    x++;
    if (Check < 0)
        Check += (2 * x) + 1;
    else {
        Check += 2 * (x - y) + 1;
        y--;
    }
    Draw1Dot(xC + x + (Radius * Cos), yC + y + (Radius * Sin), 1.f, 1.f, 1.f);      //1
    Draw1Dot(yC + y + (Radius * Cos), xC + x + (Radius * Sin), 1.f, 1.f, 1.f);      //2
    Draw1Dot(yC + y + (Radius * Cos), xC - x + (Radius * Sin), 1.f, 1.f, 1.f);      //3
    Draw1Dot(xC + x + (Radius * Cos), yC - y + (Radius * Sin), 1.f, 1.f, 1.f);      //4
    Draw1Dot(xC - x + (Radius * Cos), yC - y + (Radius * Sin), 1.f, 1.f, 1.f);      //5
    Draw1Dot(yC - y + (Radius * Cos), xC - x + (Radius * Sin), 1.f, 1.f, 1.f);      //6
    Draw1Dot(yC - y + (Radius * Cos), xC + x + (Radius * Sin), 1.f, 1.f, 1.f);      //7
    Draw1Dot(xC - x + (Radius * Cos), yC + y + (Radius * Sin), 1.f, 1.f, 1.f);      //8
}

//Circle filling code
for (int y = -Radius; y <= Radius; y++) {
    for (int x = -Radius; x <= Radius; x++) {
        if (x*x + y*y <= Radius*Radius)
            Draw1Dot(xC + x + Radius*Cos, yC + y + Radius*Sin, 1.f, 1.f, 1.f);
    }
}

【问题讨论】:

  • DrawCircle() 在哪里定义?请上传完整代码,以便我们自己尝试。
  • @AnmolSinghJaggi 编辑完成 :)
  • 你在旋转一个圆圈吗?你不画任何多边形
  • 围绕其中心旋转的圆圈..hmm,您希望看到什么? :)
  • Draw1Dot() 定义在哪里?

标签: c++ image-rotation


【解决方案1】:

您不会改变绘制形状的角度。

int Radius = 60;
int xC = 256;
int yC = 256;
double angle = START_ANGLE;

time_t start, end;
time(&start);

while (angle < MAX_ANGLE) {
    clear();
    time(&end);
    angle = ANGULAR_SPEED * (end - start);
    DrawCircle(Radius, xC, yC, sin(angle), cos(angle));    
}

您需要为 START_ANGLE、MAX_ANGLE 和 ANGULAR_SPEED 定义一些值

【讨论】:

  • 我接受你的回答,但输出和以前一样。我想要一个像视频一样的移动输出,但它像图片一样停止。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2016-07-30
  • 2013-12-18
  • 1970-01-01
  • 2018-05-17
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多