代码之家  ›  专栏  ›  技术社区  ›  Dpetrov

图形(二维旋转)

  •  -1
  • Dpetrov  · 技术社区  · 6 年前

    我现在正在尝试8个多小时来解决这个问题,但无法解决它,请帮助找到我的代码有什么问题。

    int main() {
        int gd = DETECT, gm;
        float ANGLE = 360/10 * M_PI/180;
    
        initgraph(&gd, &gm, NULL);
        int cx = getmaxx() / 2;
        int cy = getmaxy() / 2;
        int p[] = {cx-50,cy-150, cx+50,cy-150, cx+50,cy-50, cx-50,cy-50, cx-50,cy-150};
    
        outtextxy(cx, cy, "*");
        setcolor(G);
    
        int n, i; 
        for (n = 0; n < 10; n++)
        {
                drawpoly(5, p);
                for (i = 0; i < 10; i+=2)
                {
                        p[i] = p[i]*cos(ANGLE) - p[i+1]*sin(ANGLE) + cx - cx*cos(ANGLE) + cy*sin(ANGLE);
                        p[i+1] = p[i]*sin(ANGLE) + p[i+1]*cos(ANGLE) + cy - cx*sin(ANGLE) - cy*cos(ANGLE);
                }
        }
    
        getch();
        closegraph();
        return (0);
    }
    

    The output

    但我需要这样。

    expected output

    1 回复  |  直到 6 年前
        1
  •  0
  •   Dpetrov    6 年前

    多亏了保罗·奥格尔维。为了使转换工作,我使用了带有修改值的p[I],而不是旧值。再次感谢!

    新代码:

    int main() {
        int gd = DETECT, gm;
        float ANGLE = 360/10 * M_PI/180;
    
        initgraph(&gd, &gm, NULL);
        int cx = getmaxx() / 2;
        int cy = getmaxy() / 2;
        int p[] = {cx-50,cy-150, cx+50,cy-150, cx+50,cy-50, cx-50,cy-50, cx-50,cy-150};
    
        outtextxy(cx, cy, "*");
        setcolor(G);
    
        int n, i, save;
        for (n = 0; n < 10; n++)
        {
                drawpoly(5, p);
                for (i = 0; i < 9; i+=2)
                {
                        save = p[i];
                        p[i] = p[i]*cos(ANGLE) - p[i+1]*sin(ANGLE) + cx - cx*cos(ANGLE) + cy*sin(ANGLE);
                        p[i+1] = save*sin(ANGLE) + p[i+1]*cos(ANGLE) + cy - cx*sin(ANGLE) - cy*cos(ANGLE);
                }
        }
    
        getch();
        closegraph();
        return (0);
    }
    

    和输出:

    yep