本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
阿基米德螺旋线 小Demo
奔跑的男人 · 527浏览 · 发布于2019-07-12 +关注

偶然间发现了一个图形感觉挺有意思的!写个Demo计算图形坐标!

阿基米德螺旋线 小Demo 简单 易懂 实现 vc++8.0

index 点的下标

step 步长相邻两个点的间隔(根据自己的画布选择,这里取60px)


x,y 原点的坐标

direction 方向(4个方向一个方向两种 共8种)

下左上 下右上

左上右 右上左

上右下 上左下

右下左 左下右


POINT FindNextPosByAHMDSpiral(int index, int step = 50, int x = 0, int y = 0,int direction = 0)//默认方向 下左上
{
    POINT nextPos,lastPos;
    if(index < 1)
    {
        //第一个点默认原点
        nextPos.x = x,nextPos.y = y;
    }
    else
    {
        lastPos.x = x,lastPos.y = y;//最后一个点的坐标
        int count = 1;//找第几个点
        while(count <= index)
        {
            if(count != 1)
            {
                lastPos.x = nextPos.x;
                lastPos.y = nextPos.y;
            }
            int sum = 1;
            int n = 0;
            while(count > sum)
            {
                sum += n + 1;
                n++;
            }
            int nextDir = n % 4;// 0:左下 1:左上 2:右上 3:右下
            if(direction < 4)//顺时针4种
            {
                nextDir += direction;
            }
            else if (direction < 8)//逆时针的4种
            {
                int d = direction - 4;
                nextDir = abs(nextDir - 3); //取相反值
                nextDir += d;
            }
            nextDir = nextDir >= 4 ? nextDir - 4 : nextDir;
            switch(nextDir)
            {
                case 0:
                    {
                        nextPos.x = lastPos.x - step / 2;
                        nextPos.y = lastPos.y + step / 2;
                        break;
                    }
                case 1:
                    {
                        nextPos.x = lastPos.x - step / 2;
                        nextPos.y = lastPos.y - step / 2;
                        break;
                    }
                case 2:
                    {
                        nextPos.x = lastPos.x + step / 2;
                        nextPos.y = lastPos.y - step / 2;
                        break;
                    }
                case 3:
                    {
                        nextPos.x = lastPos.x + step / 2;
                        nextPos.y = lastPos.y + step / 2;
                        break;
                    }
            }
            count++;
        }
    }
    return nextPos;
}


然后调用即可求出下个点的坐标。

POINT nextPos = FindNextPosByAHMDSpiral(index, 60, 512, 384, type);

下面是两张同一方向的两种图:

1562897470344730.png

1562897471901305.png


相关推荐

图形学基础 | 实现OBJ文件的载入

iamitnan · 1692浏览 · 2019-05-29 10:10:17
干货!麻将平胡算法

· 992浏览 · 2019-06-06 11:45:17
Java桌球小游戏

奔跑的男人 · 638浏览 · 2019-06-11 09:37:46
图形用户界面和游戏开发

qq2360248666 · 708浏览 · 2019-06-11 09:57:01
Three.js模型隐藏或显示

吴振华 · 557浏览 · 2019-06-14 10:18:27
Cocos工程命名规则整理(node部分)

吴振华 · 875浏览 · 2019-06-14 10:24:18
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页