- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《利用三角函数生成计算机图形
利用三角函数生成计算机图形
吴占鹏
(辽宁省风沙地改良利用研究所 阜新123000)
摘要:利用三角函数,通过加倍、嵌入等修饰,以实现生成各种绚丽图形。
关键词:计算机图形;三角函数;嵌入;修饰
计算机图形学自诞生以来,在辅助设计、美术、动画艺术、可视化计算、虚拟现实等方面得到了广泛应用。计算机图形主要分为图像和图形。图像一般是指自然生成的,如数码照片,扫描文件等。图形一般是通过计算生成的。在图形中,很多程序图形和三角函数有密切关系,利用三角函数创作曲线、着色、模型、动画可以产生意想不到的效果。
1曲线
1.1曲线细分与动画周期
三角函数曲线细分是把曲线一个圆周周期内分成n干段,即2*Math.PI /n,如果是旋转动画,简单曲线的动画周期是2*n。后面有时会简化成Math.PI/n,那么周期是4*n。
1.2简单曲线
最简单曲线当属圆形,用javascript可表示成
moveTo(a,0);
for(i=0;in;i++) {
x=a*Math.cos(i*2*Math.PI/n);
y=b*Math.sin(i*2*Math.PI/n);
lineTo(x,y);
}
这里a=b,为圆形,否则a≠b为椭圆。如果把y=b*Math.sin(i*2*Math.PI/n)改成y=b*Math.sin(i*4*Math.PI/n),则圆形变成8字形。如果写成
x=a*Math.cos(i*m*Math.PI/n);
y=b*Math.sin(i*(n) *Math.PI/n);
其中m不能为偶数,n=m+1,或n=m-1。则图形为:
图1变化 m,n生成的曲线
1.3曲线修饰
1.3.1加修饰
如果定义一个常量x=Math.PI/n,循环变量i,可以写出他的绘图程序
for(i=0,i2*n,i++){
x=a1*Math.cos(b1*i*x)+a2*Math.cos(b2*i*x);
y=a1*Math.sin(b1*i*x)+a2*Math.sin(b2*i*x);
lineTo(x,y);
}
这里a1、a2为半径系数,是大于0的实数,b1、b2为周期系数,是大于0的正整数,且b2b1,则图形会在圆形图案上形成b2-b1个突起。如果把x、y的赋值写成
x=a1*Math.cos(b1*i*x)+a2*Math.sin(b2*i*x);
y=a1*Math.sin(b1*i*x)+a2*Math.cos(b2*i*x);
或写成
x=a1*Math.cos(b1*i*x)-a2*Math.cos(b2*i*x);
y=a1*Math.sin(b1*i*x)+a2*Math.sin(b2*i*x);
或写成
x=a1*Math.cos(b1*i*x)+a2*Math.cos(b2*i*x);
y=a1*Math.sin(b1*i*x)-a2*Math.sin(b2*i*x);
则图案的突起是b1+b2个。这里我们把
a1*Math.cos(b1*i*x)
a1*Math.sin(b1*i*x)
称之为主函数,把
a2*Math.cos(b2*i*x)
a2*Math.sin(b2*i*x)
称之为修饰函数。修饰函数可随意增加,只要遵循突起规律,可以创造出无数个美丽图形,而且是对称图形。如果把b1和b2换成b1,b2,b3,b4四个不等的正整数,生成的图形多数可能是不对称的。
图2 通过加修饰生成的曲线
1.3.2乘修饰
可以写成
x=a*Math.cos(i*x)*Math.cos(b*i*x);
y=a*Math.sin(i*x)*Math.cos(b*i*x);
或写成
x=a*Math.cos(i*x)*(c+Math.cos(b*i*x));
y=a*Math.sin(i*x)*(c+Math.cos(b*i*x));
b=5,c=1 b=5,c=1.5 b=5,c=0.3 b=6,c=0.3
图3通过乘修饰生成的曲线
1.3.3嵌入修饰
如果周期系数出现非整数,曲线可能会产生无规则穿插。当把小数部分定义成1/m,即b2*(1+1/m),这样曲线经过b2*(m+1)次又形成重合,产生嵌入效果,即嵌入修饰,其循环周期是2*n*m(n在前面定义过)。也可写成b2*(k+s/m),这里s允许是负整数,嵌入次数为b2*(k*m+s)。这种嵌入方式加修饰、乘修饰都适合。
图4 利用嵌入修饰生成的花篮
1.3.4藤编效果
利用正弦余弦的嵌入方式只改变b2,在曲线的交汇点处产生偏移,避免重合,就像用一条藤子编织而成。
图5藤编效果曲线
2着色
利用三角函数可以使着色产生渐变效果。
2.1简单渐变
这种着色界限不是很明显,没有纯红、纯绿和纯蓝色:
文档评论(0)