科赫曲线又被称为雪花曲线,是分形中的一种,画科特曲线的基本思路是先画一个给定边长和顶点坐标的正三角形,通过数学方法求出另外两个点的坐标,然后从界面获得要递归的次数(递归一次三角形的每一条边就被分为三等分以此类推),求出每一条边最终被分成了多长的小等分,最后从某一个顶点开始画最小等份的_/\_形状并逐层向上返回(另外两个端点也一样)。
要注意的地方:
1、 从界面输入的递归次数是String类型的,在用之前要将其转换为int类型的
//获取递归次数
String a = jta.getText();
//将String “a”转为int a
times = Integer.parseInt(a);
2、 要画线段的起始坐标先定义为double,因为用数学函数求出的是double类型的数据,画的时候再强制转换为int,这样可以使得误差小一些。
3、 要将给出的角度转换为弧度角,例如angle为180度(无法表示出),所以就要转化为Math.PI(3.141592657)弧度
R = Math.PI/180*angle;
具体代码如下:
package com20130318;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
* 写一个画科特曲线的类
* @author
*
*/
public class Koch extends JFrame{
//主函数
public static void main(String args[]){
Koch ko = new Koch();
ko.showInfo();
}
public void showInfo(){
//创建一个固定大小的窗体对象
JFrame jf = new JFrame();
jf.setSize(400,400);
//设置窗体的布局管理
java.awt.FlowLayout fl = new java.awt.FlowLayout();
jf.setLayout(fl);
jf.setResizable(false);
jf.setDefaultCloseOperation(3);
//jf.getContentPane().setBackground(Color.BLACK);
//创建一个标签
String str="递归层数:";
JLabel jl = new JLabel(str);
jf.add(jl);
//标签长度
JTextField jta = new JTextField(10);
jf.add(jta);
jf.setVisible(true);
//得到画布对象
Graphics gr = jf.getGraphics();
//创建一个鼠标监听器
MyMouseListener lis = new MyMouseListener();
lis.gr = gr;
lis.jta = jta;
jf.addMouseListener(lis);
}
}
package com20130318;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JTextField;
/**
* 自定义一个鼠标监听器类
* @author Administrator
*
*/
public class MyMouseListener implements MouseListener{
Graphics gr;
JTextField jta;
//times用来记录递归调用的次数
int times ;
double angle;
//(x0,y0)表示要画线段的起始坐标,先定义为double,画线段时再强制转换为int
double x0;
double y0;
//length表示当前线段的长度
double length;
/**
* 自定义mouseClicked方法 用来获取递归次数
*/
public void mouseClicked(MouseEvent e) {
gr.clearRect(50, 50,600,600);
//获取递归次数
String a = jta.getText();
//将String “5”转为int “5”
times = Integer.parseInt(a);
paint(gr);
// try {
// Thread.sleep(200);
// }catch(Exception ef){}
//
}
/**
* 定义一个paint方法
* @param g 传入画布参数
*/
public void paint(Graphics g) {
gr.setColor(Color.BLUE);
// 返回3的time次幂的值
int N = (int) Math.pow(3, times);
//求出当前长度
length = 200.0 / N;
/**
* 画 "/ "(x0,y0)左下的端点,,因为三角形的顶点坐标为(150,100),所以y0 = (int)(Math.sqrt(3)*100)+50
*/
angle = -60;
x0 = 50;
y0 = (int)(Math.sqrt(3) * 100) + 100;
drawKoch(g, times, angle);
/**
* 画 "\" (x0,y0)左上的端点(150,100)
*/
angle = 60;
x0 = 150;
y0 = 100;
drawKoch(g, times, angle);
/**
* 画" _ "(x0,y0)右端点
*/
angle = 180;
x0 = 250;
y0 = (int)(Math.sqrt(3) * 100) + 100;
drawKoch(g, times, angle);
}
public void drawKoch(Graphics g, int n, double angle) {
double x1, y1, R;
if (n == 0) {
//转化为弧度角,例如angle为180度(无法表示出),则可以转化为Math.PI(3.1415926)弧度
R = Math.PI / 180 * angle;
//每次求出离当前端点最近的下一端点坐标,并画出该线段
x1 = length * Math.cos(R) + x0;
y1 = length * Math.sin(R) + y0;
g.drawLine((int) x0, (int) y0, (int) x1, (int) y1);
//更换当前端点坐标
x0 = x1;
y0 = y1;
return;
}
/**
* 画出的曲线依次是_/\_
*/
drawKoch(g, n-1, angle);
drawKoch(g, n-1, angle - 60);
drawKoch(g, n-1, angle + 60);
drawKoch(g, n-1, angle);
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
包括二十多个分形程序,从最简单的科赫曲线到曼代尔波集合.内容参见 分形艺术程序设计>>. (运行程序时,右键点出快捷菜单.先选定图形再作图.看复平面上的分形时, 请将const int STEP=4改为1.) 本程序用CB5编写,在...
科赫曲线的生成过程是将一条直线段分成三等份,然后在中间三分之一处添加一个正六边形的两对对角线,重复此过程于每一段新生成的线段上。科赫格子则是将这种规则应用到二维网格上,每次迭代都会使线条变得更加复杂。...
科赫曲线matlab程序代码,仅供了解原理,了解迭代过程。
这是一个用MATLAB语言写的生成科赫曲线的程序,其中科赫曲线是分形理论中的常见图形。
本主题将深入探讨如何使用IDL和ENVI来计算地球化学元素异常或遥感影像的多重分形分维曲线。 首先,让我们了解什么是多重分形。分形是自然界中普遍存在的几何形态,它们具有自相似性,即使在不同尺度下观察也能发现...
科赫雪花曲线(Koch Snowflake Curve)是一种典型的分形曲线,因其形状类似于雪花而得名。这个概念源自数学家弗里德里希·维克托·科赫在1904年提出的一种构造方法。 科赫雪花曲线的构造过程基于一个简单的迭代规则...
python设计科赫曲线分形树
科赫曲线是一种典型的分形几何图形,具有自相似的特性。它是由瑞典数学家赫尔曼·冯·科赫于1904年首次提出的。科赫曲线的生成过程是通过不断迭代一个基本的构造单元来实现的。本文将基于提供的MATLAB代码,详细解析...
NULL 博文链接:https://luliangy.iteye.com/blog/1266548
%分形插值曲线函数 %x为插值点,五个插值点(1,2),(2,2.5),(3,4),(4,6),(5,3) % n为迭代次数 % example1; 来自于:周承新,陈慧琴;分形插值曲线的MATLAB实现[J];科技广场;2009,3:119-120. % 但有所改动,没有初始输入...
科赫曲线是一种著名的分形几何图形,它通过迭代过程构建,每次迭代都将直线段替换为更复杂的形状,以此形成自相似的雪花状结构。在MATLAB中实现科赫曲线,涉及到的主要知识点包括: 1. **MATLAB基础**:MATLAB是一...
雪花分形最著名的例子是科赫雪花,它是通过将等边三角形的每一条边替换为更复杂的形状(通常是四个小等边三角形)来构建的,这个过程可以无限重复,每次迭代都会增加图形的复杂度。 在OpenGL中实现雪花分形,首先...
本代码描述了基于c#语言将一条直线进行分形,模拟海岸线的生成。具体实现为先计算一次,以生成任意两点间的KOCH曲线,然后自己设置迭代次数进行迭代产生任意迭代次数的KOCH曲线
科赫曲线(Koch curve)是最早被研究的分形之一,由瑞典数学家费利克斯·科赫在1904年提出。科赫曲线通过迭代过程生成,每次迭代都将直线段替换为更复杂的结构。在此背景下,我们讨论的是如何在MATLAB中利用复数和...
基本步骤是将一条直线段分为三等份,然后在中间三分之一处添加一个60度角的小三角形,这样原来的线段就被三条新的线段替代了。重复此过程,每次迭代都会增加更多的线段,使得曲线越来越复杂。科赫曲线通常通过递归...
雪花曲线是科赫曲线的一种变体,它基于科赫曲线的构建原理,但每次迭代时在每个三角形的顶点处添加等边三角形的三分之一边。经过无限迭代,形成的曲线具有无限长度,包围的区域却只有有限的面积,而且其边界具有令人...
NULL 博文链接:https://xiaozhouzhou.iteye.com/blog/1893645
2. 分形维度估计:通过计算数据点的盒维数或相关维数,确定分形曲线的分形维度。 3. 构建分形模型:根据分形维度,选择合适的分形模型(如分形网络、分形树等)。 4. 迭代插值:通过迭代算法,将数据点映射到分形...
分形曲线是分形理论的核心内容之一,它们通常不是平滑连续的,而是具有无穷的细节和复杂的分支结构。著名的分形曲线有曼德勃罗集合、朱利亚集合、科赫曲线等。这些曲线的生成通常通过迭代函数系统实现,每次迭代都会...