snowcurves.htm
来自「电脑图学(Computer Graphics)是资料结构、演算法与数学的应用」· HTM 代码 · 共 137 行
HTM
137 行
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>雪花曲线</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="ComputerGraphics.htm">Computer Graphics: 雪花曲线</a></h1>
雪花的递回绘图基本图案如下图左所示,进一步的构图如下图右所示: <br>
<img style="width: 246px; height: 80px;" alt="" src="images/snowCurves-1.jpg"><br>
<br>
<br>
这只是个大致的绘图,说明雪花的基本架构,但并不是很精确,在递回时起始位置还需用上一些数学运算,才能使雪花绘图接近自然,这个部份请自行观看示范程式中的原始码,如下所示: <br>
<ul>
<li> SnowCurve.java
</li>
</ul>
<pre>package onlyfun.caterpillar.graphics.recursive;<br> <br>import onlyfun.caterpillar.graphics.Turtle;<br>import java.awt.Color;<br>import java.awt.Graphics;<br>import javax.swing.JApplet;<br> <br>public class SnowCurve extends JApplet {<br> private Turtle t;<br> <br> public void init() { <br> t = new Turtle(); <br> <br> setBackground(Color.black); <br> }<br> <br> public void snow(double rad, double min, <br> double ks, Turtle t) { <br> if(rad>min) { <br> double r=rad*(1-ks)/(1+ks); <br> snow(r, min, ks, t); <br> int n=(int)Math.ceil(<br> Math.log(min/rad)/Math.log(ks)); <br> for(int i=0;i<6;i++) { <br> for(int j=1;j<n;j++) { <br> t.warp(rad*(1-Math.pow(ks,(double)j))); <br> snow(r*Math.pow(ks,(double)j), min, ks, t); <br> t.warp(-rad*(1-Math.pow(ks,(double)j))); <br> } <br> t.turn(60.0); <br> } <br> } <br> else <br> t.pset(t.LPX, t.LPY); <br> } <br><br><br> public void paint(Graphics g) {<br> g.setColor(Color.yellow);<br> <br> t.setGraphics(g);<br> t.window(0, 0, getSize().width, getSize().height); <br> t.view(0, 0, getSize().width, getSize().height); <br> t.setpoint(300, 50); <br> t.setangle(90.0); <br><br> double d = getSize().height / 8; <br><br> for(int i = 0; i < 20; i++) { <br> double x = d + (getSize().width - 2*d) * <br> Math.random(); <br> double y = d + 5 * d * Math.random(); <br> double r = 0.1 * d + 0.9 * d * Math.random(); <br> t.setpoint(x,y); <br> t.setangle(90.0); <br> snow(r, 0.1, 0.5, t); <br> } <br> } <br>}</pre>
<br>
<img style="width: 540px; height: 360px;" alt="" src="images/snowCurves-2.jpg"><br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?