Koch曲线
Koch曲线是一种分形,完整的Koch曲线像雪花,维基百科上记录Koch曲线最早出现在海里格·冯·科赫的论文《关于一条连续而无切线,可由初等几何构作的曲线》中,它的定义如下,给定线段AB,科赫曲线可以由以下步骤生成:
- 将线段分成三等份(AC,CD,DB)
- 以CD为底,向外(内外随意)画一个等边三角形DMC
- 将线段CD移去
- 分别对AC,CM,MD,DB重复1~3
完整的Koch雪花是由一个等边三角形分别按照以上步骤得到的分形曲线。
一些关于Koch曲线的介绍:
http://en.wikipedia.org/wiki/Koch_snowflake
http://www.matrix67.com/blog/archives/243
用Java实现Koch曲线的代码Koch.java
package com.elvalad; import java.awt.*; /**
* Created by elvalad on 2014/12/28.
*/
public class Koch {
private double x1;
private double y1;
private double x2;
private double y2;
private Color color = new Color(43, 77, 219); /**
* Koch曲线构造函数
* @param x1 Koch曲线起始点横坐标
* @param y1 Koch曲线起始点纵坐标
* @param x2 Koch曲线终止点横坐标
* @param y2 Koch曲线终止点纵坐标
* @param color Koch曲线的颜色
*/
public Koch(double x1, double y1, double x2, double y2, Color color) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.color = color;
} /**
* @param g
*/
public void draw(Graphics g) {
g.setColor(this.color);
this.drawShape(g, this.x1, this.y1, this.x2, this.y2);
} /**
*
* @param g
* @param x1 Koch曲线起始点横坐标
* @param y1 Koch曲线起始点纵坐标
* @param x2 Koch曲线终止点横坐标
* @param y2 Koch曲线终止点纵坐标
*/
private void drawShape(Graphics g, double x1, double y1, double x2, double y2) {
double c = 1.0;
double x3 = 0;
double y3 = 0;
double x4 = 0;
double y4 = 0;
double x5 = 0;
double y5 = 0;
double l = 0;
double alpha = 0;
g.setColor(this.color);
if (((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y2)) < c) {
g.drawLine((int)x1, 500 - (int)y1, (int)x2, 500 - (int)y2);
} else {
x3 = x1 + (x2 - x1) / 3;
y3 = y1 + (y2 - y1) / 3;
x4 = x2 - (x2 - x1) / 3;
y4 = y2 - (y2 - y1) / 3;
l = Math.sqrt(((y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1))) / 3;
alpha = Math.atan((y4 - y3) / (x4 - x3));
if ((alpha >= 0) && (x4 - x3) < 0 ||
(alpha <= 0) && (x4 - x3 < 0)) {
alpha = alpha + Math.PI;
}
x5 = x3 + Math.cos(alpha + Math.PI / 3)*l;
y5 = y3 + Math.sin(alpha + Math.PI / 3)*l;
drawShape(g, x1, y1, x3, y3);
drawShape(g, x3, y3, x5, y5);
drawShape(g, x5, y5, x4, y4);
drawShape(g, x4, y4, x2, y2);
}
}
}

Koch曲线的更多相关文章
- koch曲线与koch雪花的MATLAB实现
代码 % -- function koch(Ax, Ay, Bx, By) % 控制递归深度 Deepth = ; % 控制图画大小 Size = ; + (By-Ay)^) < Deepth ...
- JavaScript图形实例:Koch曲线
Koch曲线的构造过程是:取一条长度为L0的直线段,将其三等分,保留两端的线段,将中间的一段改换成夹角为60度的两个等长直线:再将长度为L0/3的4个直线段分别进行三等分,并将它们中间的一段均改换成夹 ...
- KochSnow曲线
在这里实现了Koch曲线,而且提到我们只需要对一个等边三角形的各条边按照Koch曲线的算法进行绘图就能得到KochSnow曲线,将其实现到之前提到的绘图框架中,考虑到KochSnow的实现主要依赖Ko ...
- 海岸线、科赫曲线、turtle、递归
本章绘图要点: turtle模块:python标准库自带的一个模块,可用来绘制二维图形.该模块封装了底层的数据处理逻辑,向外提供了更符合手工绘图习惯的接口函数,适用于绘制对质量.精度要求不高的图形. ...
- 分形几何算法和实现(C语言)
初识分形 1.分形的含义: 英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的.其含义是不规则的.破碎的.分数的.曼德勃罗是想用此词来描述自然界中传统 ...
- win-tc图形库编程
本文地址:http://www.cnblogs.com/archimedes/p/win-tc-graphics-use.html,转载请注明源地址. 由于最近接到一个紧急任务,需要实现一个程序,显示 ...
- 高效的多维空间点索引算法 — Geohash 和 Google S2
原文地址:https://www.jianshu.com/p/7332dcb978b2 引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车.打开 app 会看到如下的界面: app ...
- 分形之拆分三角形(Split Triangle)
前面讲了谢尔宾斯基三角形,它是不停地将一个三角形拆分三个与之相似的三角形.这一节给大家展示的图形是将一个等腰钝角三角形不停地拆分两个与之相似的三角形. 核心代码: static void SplitT ...
- 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具
opengl 计算机图形学 第三版 第二部分 第三章更多的绘图工具 3.1 概述 第2章中 我们绘图使用的是屏幕窗口的基础坐标系 以像素为单位 屏幕坐标从左下角x从0延伸到scr ...
随机推荐
- robotframework笔记2
法文件和目录 层次结构安排测试用例构建如下: 在创建测试用例 测试用例文件 . 自动创建一个测试用例文件 测试套件 包含 测试用例文件. 一个目录包含测试用例文件形成一个更高级别的测试 套件. 这样一 ...
- Path Sum [LeetCode]
Problem Description: http://oj.leetcode.com/problems/path-sum/ Pretty easy. /** * Definition for bin ...
- centOS wget的安装和使用
CentOS wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 所谓的自动下载是指,CentOS wget可以在用户退出系统的之后在后台执行 ...
- Struts、JSTL标签库的基本使用方法
一 使用Struts标签之前需要经过下面3个步骤的配置. 1.导入TLD文件. 2.在web.xml中注册标签库. 3.在页面中引入标签库. 下面详细介绍以上步骤. 1 导入TLD文件. TLD文件是 ...
- java.util 类 TreeSet<E>
java.lang.Object≥ java.util.AbstractCollection<E> ≥ java.util.AbstractSet<E> ≥ java.util ...
- SAP销售订单状态修改(审核) 计划行自动产生需求,产生MD04需求
不知道业务怎么配置的,创建销售单时,一堆计划行类别,什么CN,DN...都有,但是审核后需要计划行变更为CP,这样在MD04才能看到需求. 原有逻辑是弄个后台程序,审核后调一下,更新一下计划行,这样是 ...
- 玩转linux文件(重点)
一.几个主要的操作 mkdir—创建目录 cp—复制文件和目录 mv——移动/重命名文件和目录 rm——删除文件和目录 ln——创建硬链接和软链接 二.几个考点: 通配符 硬链接和软链接(符号链接) ...
- 在Handler.ashx文件中使用session
使用jquery调用handler文件中的方法,需要使用session,默认生成的文件中,不可以直接使用session.按照以下步骤,即可以通过session与其他的aspx页面的session进行数 ...
- css中的zoom
CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...
- formvalidator4.1.3 使用过程中一些问题的解决
在使用formvalidator4.1.3 插件时 发现 正常情况调用时没有问题的,但是我们的项目中需要把css .js 之类的静态资源用单独的域名加载. 那么问题就来了在 该插件中 有一段这样的 ...