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:&nbsp;雪花曲线</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&gt;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&lt;6;i++) { <br>                for(int j=1;j&lt;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 &lt; 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 + -
显示快捷键?