算法生成N芒星

前面两个图像生成算法是:道教的太极八卦图和佛教的卐和卍字图。这一节整个洋气的图像:芒星。但愿我别召唤出什么恐怖的禁忌。平时看玄幻小说,经常读到有关六芒星,七芒星,九芒星的技法。芒星是由几个完全的等腰三角形(有时是正三角形)和一个正多边形组成的二维图形。等腰三角形的个数与正多边形的边数相等。由五个等腰三角形和正五边形组成的图形叫“五芒星”(俗称:五角星)。由六个等腰三角形和正六边形组成的图形叫“六芒星”……依此类推。芒星在美学、历史和占卜都有着很大的用处。

芒星在生活中与我们息息相关,我们常说的“五角星”也是芒星的一种。五芒星的五个顶点都代表不同的元素,分别是地、水、火、风及象征人类精神力量的第五元素,而五芒星亦是在魔法中是常被使用的符号,因为其整体一看就像一个人的身体,最顶一点为头部,其余为四肢。在圣经中,人是被创造者,而五芒星也含有被创造之意,这就和四元素及人体相对应。当顶点指向天时,那便代表圣力。

Tantrism派认为,六芒星形中尖端向下的三角形是卡利·玛的象征物“女阴”的符号,除了倒三角形之外,它也表示为鱼、两端尖锐的椭圆形、马蹄、蛋等图形。因此这个倒三角被称为“女阴的图象”即“Yoni Yantra”,其中“Yantra”是Tantrism派所认为的“冥想的图象”,是适用于眼睛的图象,和“适用于耳的图象”-“真言”(Mantra-曼荼罗,象征为八叶莲花)互为表里。倒三角形代表了万物之源-宇宙之母,表示盛满宇宙之母体液(力量)的容器。

在西方,7被认为是一个很有魔力的数字。被神秘学视为意义上更复杂的芒星,力量也更强大的图案。关于七芒星的资料: 1 .七芒星很难被准确地画出,因为七芒星是“不平均却稳定的一体” 2.七芒星分为“正七芒星”与“逆七芒星” 3.关于“七芒星魔法阵”也是众说纷纭 4.七芒星魔法阵的功效被记载得不多,只知道大概可以用来召唤超能。因此没有任何魔法师或者术士敢使用,七芒星因此成了禁忌。传说一笔画出过完美七芒星的人有的说看见了炽天使长米迦勒,有的说看见了地狱魔君路西法,也有人说看见了天堂的生命树,甚至有人说看见了末日。

八芒星与卐字符号是遍布于我国广大地域多个民族的文化符号。有学者认为神秘的卐字符号其实是八角星纹的简化变体,它们都代表了太阳在一个回归年的视循环运动,即一年四季的循环变化。 八角星让人想起罗盘、六分仪、舵,像是朝向八方的宝剑。八角星的八个角代表八个方向,意为绝对的混沌或混沌能量的八种形态(天地风雷水火山泽)。

这篇文章中提供了两套生成芒星的算法,先看第一个:

void            CPixelNStar::ResetN()
{
    m_n = (unsigned int)m_params[0];
    if (m_n < 5)
    {
        m_n = 5;
    }
    else if (m_n > 32)
    {
        m_n = 32;
    }

    float radius = 400.0f;

    for (unsigned int i = 0; i < m_n; i++)
    {
        m_listPoints[i].x = radius*sinf((i - 0.5f)*2*PI/m_n);
        m_listPoints[i].y = radius*cosf((i - 0.5f)*2*PI/m_n);
    }
}

unsigned int    CPixelNStar::CalculatePixel(unsigned int x, unsigned int y)
{
    unsigned int red = 0xffff0000;
    unsigned int yellow = 0xffffc000;
    unsigned int gray = 0xff808080;

    Vec2 P(x - 512.0f, y - 512.0f);

    bool bCenter = true;
    for (unsigned int i = 0; i < m_n; i++)
    {
        Vec2& v = m_listPoints[i];
        Vec2& vL1 = m_listPoints[(i + m_n - 1)%m_n];
        Vec2& vL2 = m_listPoints[(i + m_n - 2)%m_n];
        Vec2& vR1 = m_listPoints[(i + 1)%m_n];
        Vec2& vR2 = m_listPoints[(i + 2)%m_n];

        if (!IsPointInAngle(vL2, v, vR2, P))
        {
            bCenter = false;
        }
        else if (IsSameSide(vL1, vR1, v, P))
        {
            return red;
        }
    }

    return bCenter ? yellow : gray;
}

生成图像有:

五芒星

六芒星

七芒星

八芒星

九芒星

十芒星

十一芒星

十二芒星

十三芒星

二十三芒星

关于结构体Vec2的定义见:二维平面上判断点在三角形内的最优算法

第二种算法为:

void            CPixelNLightStar::ResetN()
{
    m_n = (unsigned int)m_params[0];
    if (m_n < 3)
    {
        m_n = 3;
    }
    else if (m_n > 32)
    {
        m_n = 32;
    }

    for (unsigned int i = 0; i < m_n; i++)
    {
        m_list_sin[i] = sinf((i - 0.5f)*2*PI/m_n);
        m_list_cos[i] = cosf((i - 0.5f)*2*PI/m_n);
    }
}

unsigned int    CPixelNLightStar::CalculatePixel(unsigned int x, unsigned int y)
{
    float radius = m_params[1];
    float h = radius*m_params[2];

    unsigned int red = 0xffff0000;
    unsigned int yellow = 0xffffc000;
    unsigned int gray = 0xff808080;

    float i = x - 512.0f;
    float j = y - 512.0f;

    float dis = sqrtf(i*i + j*j);
    if (dis < radius*cosf(PI/m_n))
    {
        return red;
    }
    else if (dis > radius + h)
    {
        return gray;
    }

    Vec2 tri0(0.0f, radius + h);
    Vec2 tri1(radius*m_list_sin[0], radius*m_list_cos[0]);
    Vec2 tri2(radius*m_list_sin[1], radius*m_list_cos[1]);
    Vec2 P;

    bool bCenter = true;
    for (unsigned int m = 0; m < m_n; m++)
    {
        P.x = i*m_list_cos[m] - j*m_list_sin[m];
        P.y = i*m_list_sin[m] + j*m_list_cos[m];

        if (IsPointInTriangle(tri0, tri1, tri2, P))
        {
            return yellow;
        }
    }

    if (dis < radius)
    {
        return red;
    }

    return gray;
}

算法中可以设置芒星半径长度和角的高度,以生成更多样的芒星:

相应软件:

Why数学图像生成工具

之前我写过一篇与芒星有关的图形画法:

数学图形(1.30) 星星

相关文章:

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[上]

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]

时间: 2024-10-08 09:19:40

算法生成N芒星的相关文章

算法生成七芒星

玄幻小说中经常会有七芒星的技法,这一节就使用算法生成下七芒星的图像.在西方,7被认为是一个很有魔力的数字.上帝用7天造人,第7天休息:圣经启示录中有7封印.7灯台.7号角等等.但是魔法符号中却很少见到七芒星.不过在神秘学上,七芒星阵是存在的,他蕴含着非常强大的力量,无数的人都在寻觅并探索着他,但是七芒星的强大,使得很多人都未能解开它的神秘面纱,这让七芒星至今都成为了一种迷. 关于七芒星的资料:       1 .七芒星很难被准确地画出,因为七芒星是“不平均却稳定的一体”.完美的七芒星是很漂亮的图

恶魔的指纹---49幅由算法生成的邪恶七芒星图像

本文将带你领略算法之美,美得让你感到恐惧.前几天写了生成七芒星的算法,之后我在此算法的基础上做了些修改,从此一发不可收拾.我想我打开了潘多拉的盒子,只要修改下算法的任意一个输入参数,就能够生成一幅独一无二的七芒星图像.这些图像如同来自地狱一样,让我感到惊悚恐惧.有人曾将曼德勃罗集生成的分形图像称为上帝的指纹,那么这些饱含邪恶气息的七芒星图像应该算是恶魔的指纹. 有一次我对公司的一个策划开玩笑说:"你再给我提需求,我就写程序画圈圈诅咒你",并且我去年还真写了这么个程序,见:画圈圈诅咒你.

算法生成五星红旗

这一篇将提供一套生成五星红旗的算法,代码中满满都是正能量.上一篇文章是生成N芒星,五角星是就芒星的一种,所以不难生成一个五角星的图像.中华人民共和国国旗是五星红旗,旗面为红色,长宽比例为3:2.左上方缀黄色五角星五颗,四颗小星环拱在一颗大星的右面,并各有一个角尖正对大星的中心点.1.4颗黄星对齐,2.3颗黄星对齐. 代码如下: h 1 class CPixel5StarsRedFlag : public IPixelEquation 2 { 3 public: 4 CPixel5StarsRed

三生万物---算法生成的25幅三角形图像

<道德经>第四十二章:“道生一,一生二,二生三,三生万物.万物负阴而抱阳,冲气以为和.”这是老子对宇宙起源的一种探索和认识,其含义是说宇宙最初有道,有物混成,先天地生.老子的这话是对伏曦八卦和<易经>的总结.太极生两仪,谓阴阳:两仪生四象,谓太阴,少阳,少阴,太阳:四象生八卦,谓乾.兑.离.震.巽.坎.艮.坤.八卦及六十四卦,过于繁复,老子贯通易理,总结为三生万物. 太极是阴中有阳,阳中有阴的混沌状态.太极生两仪,谓阴阳.阴阳是对立的无限的两极,是理想状态,构不成客观存在.阴阳相济

雪花六出---几幅算法生成的雪花图像,并祝大家平安夜和圣诞节快乐

今天和明天是平安夜和圣诞节,发几幅雪花的图像应下节日.本来是打算写个关于算法生成雪花的学术论文,但发现这东西很难写下去.主要是找不到一个提高论文逼格的数学公式,所以就发下博客吧.共有10幅PNG图像和3幅GIF动画图像,都是黑白二值化的图像. 雪花是种典型的混沌分形物体,在它身上能体现规则与随机的统一.说它规则是因为每一片雪花都是六边形的,至少有六边形的样子.而组成雪花的每一个分子都是随机混沌的.没有办法确定某一个水分子在生成雪花后位于雪花的哪个位置. 雪花是水分子的结晶,水分子又是由一个氧原子

太阳崇拜---64幅由算法生成的八芒星图像

八芒星与卐字符号是遍布于我国广大地域多个民族的文化符号.有学者认为神秘的卐字符号其实是八角星纹的简化变体,它们都代表了太阳在一个回归年的视循环运动,即一年四季的循环变化.八角星纹集中发现于长江中下游与黄河下游的中国东部地区, 在红山和良渚文化也有发现.与从赤峰到香港的中国东面沿海人面岩画分布带之间是否存在关联值得关注.如今,八芒星与卐字符号是遍布于我国广大地域多个民族的文化符号. 再发些从网上收集的八芒星相关资料,原址为:http://blog.sina.com.cn/s/blog_6a4e1c

火火火---12幅算法生成火的图像

火影终于要大结局了,几年前我曾追过一振.发几幅图像纪念一下吧,都是我用算法生成的.这些图像看上去还是有些震撼的,尤其是那几幅“九尾之火”.这几天我一直在想芒星图像的生成算法,感觉自己有点走火入魔了. 先从汉字的"火"开始, "火"字有五个角,可以看做是有五个分支. 五分支生成的火单薄了些,变成七个分支看看: 七分支的火看上去不错,再看九分支的“九尾之火”.这可是本文的高潮: 酷吧.最后两幅图像是十二分支的火: 相关文章: 恶魔的指纹---49幅由算法生成的七芒星图像

正与邪---25幅由算法生成的五角星图像

      五角星,又称五芒星,是指一种有五只尖角,并以五条直线画成的星星图形.做为中国人,一定对五角星有着特殊的情感.我还记得上小学的时候,曾在课桌上刻过几个五角星以表达我的爱国之情.前几天我还写过一个算法生成五星红旗.五角星是边数最少多角形,最简单画它的方法是先画一个正五边形,把各角和其对角用直线相连,并擦去原来的五边形.也可以延长原五边形的各边直到它们相交,从而得到一个大的五角星.其最大的特点是符合黄金分割0.618. 五角星被很多国家的军队作为军官(尤其是高级军官)的军衔标志使用. 一直

混沌开窍---24幅由算法生成的正方形图像

庄子讲过这么一个故事:南海之帝名叫倏,北海之帝名叫忽,中央之帝名叫浑沌.倏和忽经常一起在浑沌的地上相遇,浑沌待他们很好.倏和忽商量怎样报答浑沌的友情,他们说:“人们都有眼.耳.鼻.口七窍,用来看.听.吃.呼吸,唯独浑沌什么也没有,我们就试着为他凿开七窍吧.”于是他们就为浑沌凿七窍,一天凿成一窍,凿到第七天,七窍全凿通时,浑沌就死了. 我对这个寓言的理解是:混沌是无规律的,一旦为其找到了规律,那么混沌就称不上混沌了. 在上一篇文章中我讲到谢尔宾斯基三角形的生成算法,那么将三角形改成一个矩形或正方形