算法生成N芒星
摘要:前面两个图像生成算法是:道教的太极八卦图和佛教的卐和卍字图。这一节整个洋气的图像:芒星。但愿我别召唤出什么恐怖的禁忌,尤其今晚还是万圣节之夜。平时看玄幻小说,经常读到有关六芒星,七芒星,九芒星的技法。芒星是由几个完全的等腰三角形(有时是正三角形)和一个正多边形组成的二维图形。等腰三角形的个数与...
阅读全文
posted @
2014-10-31 17:56
叶飞影
阅读(6799)
推荐(0) 编辑
二维平面上判断点在三角形内的最优算法
摘要:园子里有很多关于点是否在三角形内的文章,提供了各种方法。这让人很纠结,到底该用哪种算法?这里提供一套我认为最优的算法。如果你有不同的意见,亦或有更好的算法,欢迎来讨论。 算法使用的是同向法,其原理是:假设点P位于三角形ABC内,会有这样一个规律:三角形的每一个边,其对角点与P在边的同一侧;或者...
阅读全文
posted @
2014-10-31 11:52
叶飞影
阅读(4261)
推荐(3) 编辑
算法生成卐和卍字图
摘要:前面讲了算法生成道教的太极八卦图,这一节发个与佛教有关的卍字图。这个图形应该是我上学时课桌上刻的最多的三个符号之一,另外两个是"早"和五角星。卍梵文Svastika,武则天定音为万字;意译为吉祥海云,吉祥喜旋,为佛三十二相之一,也是八十种好之一;此为显现于佛及十地菩萨胸臆等处之德相。长阿含经卷...
阅读全文
posted @
2014-10-30 18:24
叶飞影
阅读(8433)
推荐(1) 编辑
分形之可编辑折线
摘要:将一条线段变成若干条首尾相连的线段,然后对每一条新生成的线段重复此操作,最终会生成一幅很漂亮的图形.这就是折线的分形图形.之前我发过一篇文章:分形的程序实现,里面实现了近20种分形图形的生成算法。在这些分形算法中,大部分是针对折线的,即将一条线段不停得拆分出多条线段,如:列维(levy)曲线,...
阅读全文
posted @
2014-10-30 06:20
叶飞影
阅读(1698)
推荐(1) 编辑
算法生成太极八卦图
摘要:前面一篇文章是通过算法生成一幅太极图,有道是:无极生太极,太极生两仪,两仪生四象,四象生八卦.那么这一节就为太极生成一个八卦图.八卦图衍生自汉族古代的《河图》与《洛书》,传为伏羲所作。其中《河图》演化为先天八卦,《洛书》演化为后天八卦。八卦各有三爻,“乾、坤、震、巽、坎、离、艮、兑”分立八方,...
阅读全文
posted @
2014-10-29 13:31
叶飞影
阅读(13509)
推荐(46) 编辑
通过算法生成一幅太极图
摘要:前几天发的文章“100幅由程序生成的图像”中,居然没有太极图,这是多么经典的图像。所以,在这篇文章中专门介绍下生成太极图的算法。之前我曾经发过关于太极的文章数学图形(1.23)太极线,那时希望能以曲线的方式描绘出太极图的形状,可惜不太成功。而使用图像的方式,生成太极图则相对比较容易,先上代码:...
阅读全文
posted @
2014-10-28 07:13
叶飞影
阅读(7535)
推荐(5) 编辑
使用异或运算对数据及文件进行加密处理,附软件及源码
摘要:前几天写了一篇文章是在C语言中使用异或运算交换两个任意类型变量,其基础为使用^交换两个整数的算法:a ^= b;b ^= a;a ^= b;如果你看明白这个算法,就会发现这样的规律:一个数异或另一个数两次后,该数保持不变。即: c = a^b; c = c^b; c == a;这一规律就是使用异或运...
阅读全文
posted @
2014-10-27 07:08
叶飞影
阅读(4328)
推荐(1) 编辑
C语言中将0到1000的浮点数用强制指针类型转换的方式生成一幅图像
摘要:搞过计算机图像的人都知道,图像中的每一个像素通常为一个整型数,它可以分成4个无符号的char类型,以表示其RGBA四个分量。一幅图像可以看做是一个二维整型数组。这里我会生成一个float数组,其数组大小为1000000,刚好1000*1000,数组内的浮点数的数值范围在0到1000.0之间,呈...
阅读全文
posted @
2014-10-25 21:56
叶飞影
阅读(3157)
推荐(1) 编辑
算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]
摘要:来看看算法能生成什么样的图像,继续发余下的50幅。这50幅图像中大部分与分形有关,算法难度要比前50幅大一些,当然其视觉效果会更为惊艳。所有图像均由我开发的软件“Why数学图像生成工具”生成。
阅读全文
posted @
2014-10-24 06:14
叶飞影
阅读(9640)
推荐(27) 编辑
算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[上]
摘要:100幅由程序生成的图像,总有一幅让你感到惊艳,这里先发前50幅。算法是抽象纠结晦涩的,图像是直观美妙的,来看看算法能生成什么样的图像吧。所有图像均由我开发的软件“Why数学图像生成工具”生成。
阅读全文
posted @
2014-10-23 06:35
叶飞影
阅读(24858)
推荐(15) 编辑
分形的程序实现
摘要:近一段时间一直在研究分形,写了几个分形相关的程序,这是其中一个。程序中里面包含近20种分形图形的生成算法。(1)科赫(Koch)雪花(2)列维(levy)曲线(3)龙形曲线(Dragon Curve)(4)C折线(5)谢尔宾斯基(Sierpinski)三角形(6)谢尔宾斯基(Sierpinski...
阅读全文
posted @
2014-10-22 07:17
叶飞影
阅读(6975)
推荐(5) 编辑
使用异或运算交换两个任意类型变量
摘要:这篇文章中将使用C语言,实现交换两个任意类型变量的功能.有人认为异或运算只能用于整数类型的交换,实际上异或运算是针对二进制的.既然计算机所有的数据类型都是以二进制进行保存的,那么当然可以用异或运算交换任何数据类型.
阅读全文
posted @
2014-10-21 14:08
叶飞影
阅读(2703)
推荐(2) 编辑
游戏中角色曲线行走的算法
摘要:这几天工作中碰到一个需求:使游戏中的NPC角色以非直线的方式走到某一位置。角色在朝着目标位置移动时,有一定的左右偏移,但到达目标位置时不能有偏差。问题中已知的是平面上的两个二维坐标点表示起点与终点,最大的偏移范围。当给定一个时刻时,需要输出角色的当前位置。 首先我做的是将整个行走轨迹画出来...
阅读全文
posted @
2014-10-21 06:47
叶飞影
阅读(3040)
推荐(3) 编辑
算法之美---由计算机生成的图像
摘要:发几幅由计算机生成的图像,以展示算法之美.并提供生成图像的算法代码.代码中,一部分是由C++实现,另一部分是由我定义的脚本语言实现.
相关软件见:Why数学图像生成工具.
阅读全文
posted @
2014-10-20 12:11
叶飞影
阅读(3047)
推荐(6) 编辑
Why数学图像生成工具
摘要:通过数学公式及算法生成各种绚烂的数学图像。提供了两种方式:
(1)通过一套我定义的脚本语言生成;先将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图像;
(2)通过软件中内置的程序算法;这里实现了近百种数学图像生成的算法,如Mandelbrot,JuliaSets之类的分形算法。
阅读全文
posted @
2014-10-19 13:01
叶飞影
阅读(12785)
推荐(78) 编辑
数学图形之肾形
摘要:少年IPhone终于有得买了,你的肾准备好了吗?这一节给大家展示一个由数学公式生成一个肾的形状。上一节讲的是Nephroid曲线,其中提到Nephroid虽然意思是肾形的,但它不像个肾。而有种曲线名为Bean曲线,却可以看成是肾形。The formula of the bean curve c...
阅读全文
posted @
2014-10-19 06:57
叶飞影
阅读(3040)
推荐(1) 编辑
数学图形(1.49)Nephroid曲线
摘要:昨天IPhone6在国内发售了,我就顺手发布个关于肾形的随笔。Nephroid中文意思是肾形的。但是这种曲线它看上去却不像个肾,当你看到它时,你觉得它像什么就是什么吧。
阅读全文
posted @
2014-10-18 17:14
叶飞影
阅读(2777)
推荐(0) 编辑
样条之最小二乘算法求多项式
摘要:核心代码: 1 // 使用最小二乘算法求多项式 2 void YcLeastSquaresFitSpline::CalculateMultinomialValues(const void* valuesPtr, int stride, int n, int m, float* a) const ...
阅读全文
posted @
2014-10-18 13:44
叶飞影
阅读(1143)
推荐(1) 编辑
样条之切比雪夫算法求多项式
摘要:核心代码: 1 // 使用切比雪夫算法求多项式 2 void YcChebyshevFitSpline::CalculateMultinomialValues(const void* valuesPtr, int stride, int n, int m, float* a) const 3 ...
阅读全文
posted @
2014-10-18 13:44
叶飞影
阅读(1211)
推荐(1) 编辑
样条之EHMT插值函数
摘要:核心代码: 1 ////////////////////////////////////////////////////////////////////// 2 // 埃特金插值 3 //////////////////////////////////////////////////////////...
阅读全文
posted @
2014-10-18 13:43
叶飞影
阅读(973)
推荐(0) 编辑
样条之埃特金(Aitken)逐步插值函数
摘要:核心代码://////////////////////////////////////////////////////////////////////// 埃特金逐步插值/////////////////////////////////////////////////////////////////...
阅读全文
posted @
2014-10-18 13:43
叶飞影
阅读(2033)
推荐(0) 编辑
样条之Akima光滑插值函数
摘要:核心代码: 1 ////////////////////////////////////////////////////////////////////// 2 // Akima光滑插值 3 // t - 存放指定的插值点的值 4 // s[] - 一维数组,长度为5,其中s(0),...
阅读全文
posted @
2014-10-18 13:43
叶飞影
阅读(4116)
推荐(2) 编辑
样条之埃尔米特(Hermite)插值函数
摘要:核心代码://////////////////////////////////////////////////////////////////////// 埃尔米特等距插值////////////////////////////////////////////////////////////////...
阅读全文
posted @
2014-10-18 13:42
叶飞影
阅读(3575)
推荐(0) 编辑
分形之海岸线
摘要:分形理论是当今世界十分风靡和活跃的新理论、新学科。分形的概念是美籍数学家曼德布罗特(B.B.Mandelbort)首先提出的。1967年他在美国权威的《科学》杂志上发表了题为《英国的海岸线有多长?》的著名论文。海岸线作为曲线,其特征是极不规则、极不光滑的,呈现极其蜿蜒复杂的变化。我们不能从形状...
阅读全文
posted @
2014-10-18 10:26
叶飞影
阅读(5922)
推荐(0) 编辑
分形之闵可夫斯基(Minkowski)
摘要:与上一篇文章分形之正方形折线相似,闵可夫斯基分形也是分形出正方体,不同之处是它分出了两个正方体。核心代码:static void FractalMinkowski(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices){ ...
阅读全文
posted @
2014-10-18 07:02
叶飞影
阅读(3239)
推荐(0) 编辑
分形之正方形折线
摘要:这种分形图形是将一条线段拆分成五条线段,其中第一条线段使用原线段的前三分之一,最后一条线段使用原线段的后三分之一。中间三条线段围成一个开口的正方形。核心代码:static void FractalSquare(const Vector3& vStart, const Vector3& vEnd,...
阅读全文
posted @
2014-10-17 17:04
叶飞影
阅读(2271)
推荐(0) 编辑
分形之花篮(Flower Basket)
摘要:这一篇展示的图形与上一篇文章分形之皇冠(Crown)很相似。核心代码:static void FractalFlowerBasket(const Vector3& vStart, const Vector3& vEnd, Yreal angle, Yreal top, Yreal bian, Vec...
阅读全文
posted @
2014-10-17 16:43
叶飞影
阅读(1736)
推荐(0) 编辑
分形之皇冠(Crown)
摘要:皇冠分形曲线核心代码:static void FractalCrown(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices){ Vector3 vSub = vEnd - vStart; Yreal len = D...
阅读全文
posted @
2014-10-17 13:47
叶飞影
阅读(846)
推荐(1) 编辑
分形之希尔伯特-皮亚诺(Hilbert-Peano)曲线
摘要:1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线。后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线。Hilbert-Peano曲线是一种分形图形,它可以画得无限复杂。它的初始图元是正方形,在迭代生成的过程中,不断细化出小的正方形,图中的线段其实是用于连...
阅读全文
posted @
2014-10-17 07:32
叶飞影
阅读(10455)
推荐(2) 编辑
样条之连分式插值函数
摘要:核心代码: 1 ////////////////////////////////////////////////////////////////////// 2 // 连分式等距插值 3 ////////////////////////////////////////////////////////...
阅读全文
posted @
2014-10-17 06:47
叶飞影
阅读(1445)
推荐(0) 编辑
样条之抛物线(一元三点)插值函数
摘要:它是根据给定结点上的数值,用抛物插值计算指定插值点处的函数。一元三点插值算法是一种精度更高的插值算法,使用这种方法插值出来的曲线不像线性插值算法那样在分段点的地方出现折点,显得更为平滑。但它是使用二次函数来进行曲线的拟合,曲线中还是会有不平滑的情况。关于插值与样条的介绍请看:http://ww...
阅读全文
posted @
2014-10-16 19:31
叶飞影
阅读(5812)
推荐(0) 编辑
分形之二叉树(Binary Tree)
摘要:上一篇文章讲的是分形之树(Tree),这一篇中将其简化一下,来展示二叉分形树的生长过程。核心代码:static void FractalBinaryTree(const Vector3& vStart, const Vector3& vEnd, Yreal angle, Yreal branch_c...
阅读全文
posted @
2014-10-16 07:28
叶飞影
阅读(3167)
推荐(1) 编辑
样条之拉格朗日Lagrange(一元全区间)插值函数
摘要:这是使用拉格朗日插值函数生成的样条曲线。在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日...
阅读全文
posted @
2014-10-15 19:06
叶飞影
阅读(2501)
推荐(0) 编辑
样条之埃尔米特(Hermite)
摘要:埃尔米特(Charles Hermite,1822—1901) 法国数学家。巴黎综合工科学校毕业。曾任法兰西学院、巴黎高等师范学校、巴黎大学教授。法兰西科学院院士。在函数论、高等代数、微分方程等方面都有重要发现。1858年利用椭圆函数首先得出五次方程的解。1873年证明了自然对数的底e的超越性...
阅读全文
posted @
2014-10-15 06:50
叶飞影
阅读(4613)
推荐(1) 编辑
样条之CatmullRom
摘要:所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面。CatmullRom样条与上一节所讲的B样条很相似,不同在于CatmullRom样条的曲线会经过其每一个控制点...
阅读全文
posted @
2014-10-14 20:55
叶飞影
阅读(15841)
推荐(1) 编辑
分形之树(Tree)
摘要:似乎每一个有关分形的教程都要讲到分形树,大概是因为树是生活中最常见的分形实物吧。这一节将展示下如何一步一步地生长出一棵树来。其实现算法不难,就是在每一次生长迭代中,使线段生长出几条新的线段来。核心代码:static void FractalTree(const Vector3& vStart,...
阅读全文
posted @
2014-10-14 14:52
叶飞影
阅读(4896)
推荐(1) 编辑
B样条
摘要:在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式。它是B-样条基曲线的线性组合。B-样条是贝兹(贝塞尔)曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多一般的几何体建造精确的模型。常数B样条常数B样条是最简单的样条。只定义在一个节点距离上,而且不...
阅读全文
posted @
2014-10-14 07:24
叶飞影
阅读(8920)
推荐(0) 编辑
样条之贝塞尔(Bezier)
摘要:我曾经发过两篇关于贝塞尔的文章:数学图形(1.47)贝塞尔(Bézier)曲线,数学图形之贝塞尔(Bézier)曲面。那是使用我自己定义的脚本语言生成贝塞尔图形。由于我自己定义的脚本语法功能有限,所以最多只能支持5次贝塞尔函数,而这里将实现N次。 N阶贝塞尔曲线可如下推断: 给定点P0...
阅读全文
posted @
2014-10-13 18:24
叶飞影
阅读(4353)
推荐(2) 编辑
插值与样条
摘要:先讲些题外话,前几天国庆回老家,在家中翻出了十年前大学时的一些教材课本,翻了几本看了看竟然如此的陌生。想当年考试前那么地刻苦学习,拼了命地上自习,到如今变成了一场空,真令人唏嘘。其中有一本教材是《数值分析》,这门课也是挺难的,至少现在让我看是完全看不懂了。而《数值分析》一开始就是讲插值的,可以...
阅读全文
posted @
2014-10-13 12:11
叶飞影
阅读(17727)
推荐(9) 编辑
分形之拆分三角形(Split Triangle)
摘要:前面讲了谢尔宾斯基三角形,它是不停地将一个三角形拆分三个与之相似的三角形。这一节给大家展示的图形是将一个等腰钝角三角形不停地拆分两个与之相似的三角形。核心代码:static void SplitTriangle(const Vector3& v1, const Vector3& v2, con...
阅读全文
posted @
2014-10-13 06:10
叶飞影
阅读(4507)
推荐(1) 编辑
分形之谢尔宾斯基(Sierpinski)四面体
摘要:前面讲了谢尔宾斯基三角形,这一节的将对二维三角形扩展到三维,变成四面体.即将一个正四面体不停地拆分,每个正四面体可以拆分成四个小号的正四面体.由二维转变到三维实现起来麻烦了许多。三维的谢尔宾斯基四面体看上去比谢尔宾斯基三角形更像坟冢。核心代码:static void SierpinskiTetr...
阅读全文
posted @
2014-10-12 14:05
叶飞影
阅读(3524)
推荐(1) 编辑
分形之谢尔宾斯基(Sierpinski)地毯
摘要:前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种。谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅在于谢尔宾斯基地毯是以正方形而非等边三角形为基础的。将一个实心正方形划分为的9个小正方形,去掉中间的小...
阅读全文
posted @
2014-10-12 08:01
叶飞影
阅读(7660)
推荐(1) 编辑
分形之谢尔宾斯基(Sierpinski)三角形
摘要:谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。也有的资料将其称之为谢尔宾斯基坟垛.其生成过程为:取一个实心的三角形。(多数使用等边三角形)沿三边中点的连线,将它分成四个小三角形。去掉中间的那一个小三角形。对...
阅读全文
posted @
2014-10-12 01:07
叶飞影
阅读(9739)
推荐(1) 编辑
分形之C折线
摘要:前面讲了列维(levy)曲线,它是将一条线段不停地分形成两条长度相等且相互垂直的线段而生成.还有分形龙也是将一个线段对折成夹角为90度的两个线段.这一节展示的是将线段不停地分形成两条长度相等且夹角不固定的线段而生成图形.这如同将一条线段变成等腰三角形,原线段为等腰三角形的底边,新生成的线段为等...
阅读全文
posted @
2014-10-10 11:47
叶飞影
阅读(1952)
推荐(2) 编辑
分形之龙形曲线(Dragon Curve)
摘要:龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名。 一种简单的生成分形龙的方式是:拿着一条细长的纸带,把它朝下的一头拿上来,与上面的一头并到一起。用一句简单的话说,就是将纸带对折。接着,把对折后的纸带再对折,又再对折,重复这样的对折几十次...
阅读全文
posted @
2014-10-09 14:10
叶飞影
阅读(15826)
推荐(5) 编辑