「分形java」分形几何学

博主:adminadmin 2022-12-22 13:51:08 56

本篇文章给大家谈谈分形java,以及分形几何学对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

求一个彩色3D分形山的MATLAB或Java或vb源程序

我这里有。要加分哦。兄弟。下面就是JAVA的源码:

// 3D painted fractal mountains, Evgeny Demidov 12 Oct 2001

import java.awt.*;

import java.awt.event.*;

import java.util.StringTokenizer;

public class MountainC extends java.applet.Applet

implements MouseListener, MouseMotionListener {

int n = 16, n1, h,w,h2,w2, mx0,my0, xPol[],yPol[], iCol[][][];

double rnd, fiX = .2, fiY = .3, dfi = .01, scale = .8, m20,m21,m22;

double vert[][][], vert1[][][], Norm[][][][], Norm1z[][][], M[];

Image buffImage; Graphics buffGraphics;

Color col[][];

boolean painted;

public void init(){

w = getSize().width; h = getSize().height; w2 = w/2; h2 = h/2;

String s=getParameter("N"); if (s != null) n = Integer.parseInt(s);

xPol = new int[3]; yPol = new int[3];

buffImage = createImage(w, h); buffGraphics = buffImage.getGraphics();

col = new Color[4][256];

for (int i = 0; i 256; i++){

col[0][i] = new Color(0, 0, i);

col[1][i] = new Color(0, (i*220)/256, 0);

col[2][i] = new Color((i*150)/256, (i*150)/256, (i*50)/256);

col[3][i] = new Color(i, i, i);}

s = getParameter("bgColor"); if (s != null){

StringTokenizer st = new StringTokenizer(s);

int red = Integer.parseInt(st.nextToken());

int green = Integer.parseInt(st.nextToken());

int blue = Integer.parseInt(st.nextToken());

setBackground( new Color(red, green, blue));}

else setBackground(new Color(255,255,255));

addMouseListener(this);

addMouseMotionListener(this);

setup();

}

public double R(){ return rnd*(Math.random()-.5);}

public void setup(){

rnd = 1;

n1 = n+1;

iterate();

vert = new double[n1][n1][3]; vert1 = new double[n1][n1][2];

double dx = w/(double)n;

int t = 0;

for (int i = 0; i n1; i++)

for (int j = 0; j n1; j++){

vert[i][j][0] = dx*i - w2; vert[i][j][2] = dx*j - w2;

double mi = M[t++];

if (mi 0) mi = .01*Math.random();

vert[i][j][1] = w*mi - w2/2;}

Norm = new double[n1][n1][2][3]; Norm1z = new double[n1][n1][2];

iCol = new int[n][n][2];

for (int i = 0; i n; i++)

for (int j = 0; j n; j++){

double s =

((vert[i][j][1] + vert[i+1][j][1] + vert[i+1][j+1][1])/3 + w2/2)/w;

if (s .01) iCol[i][j][0] = 0;

else if (s+.1*Math.random() .35) iCol[i][j][0] = 3;

else if (s+.1*Math.random() .15) iCol[i][j][0] = 2;

else iCol[i][j][0] = 1;

s = ((vert[i][j][1] + vert[i][j+1][1] + vert[i+1][j+1][1])/3 + w2/2)/w;

if (s .01) iCol[i][j][1] = 0;

else if (s+.1*Math.random() .35) iCol[i][j][1] = 3;

else if (s+.1*Math.random() .15) iCol[i][j][1] = 2;

else iCol[i][j][1] = 1;

Norm[i][j][0][0] = vert[i][j][1] - vert[i+1][j][1];

Norm[i][j][0][1] = dx;

Norm[i][j][0][2] = vert[i+1][j][1] - vert[i+1][j+1][1];

double mod = Math.sqrt(Norm[i][j][0][0]*Norm[i][j][0][0] + Norm[i][j][0][1]*

Norm[i][j][0][1] + Norm[i][j][0][2]*Norm[i][j][0][2]) / 255.5;

Norm[i][j][0][0] /= mod; Norm[i][j][0][1] /= mod; Norm[i][j][0][2] /= mod;

Norm[i][j][1][0] = vert[i][j+1][1] - vert[i+1][j+1][1];

Norm[i][j][1][1] = dx;

Norm[i][j][1][2] = vert[i][j][1] - vert[i][j+1][1];

mod = Math.sqrt(Norm[i][j][1][0]*Norm[i][j][1][0] + Norm[i][j][1][1]*

Norm[i][j][1][1] + Norm[i][j][1][2]*Norm[i][j][1][2]) / 255.5;

Norm[i][j][1][0] /= mod; Norm[i][j][1][1] /= mod; Norm[i][j][1][2] /= mod;}

rotate();

}

public void iterate(){

int nc=n, Max=n1*n1, ncn1;

double Min=-1;

M = new double[Max];

for (int i=n+2; i n*n1-1; i++) M[i] = Min;

for (int i=2*n1; i n*n1; i += n1) M[i] = M[i-1] = 0;

while ( (nc /= 2) = 1){

ncn1 = nc*n1;

for (int j=ncn1; j Max; j += ncn1+ncn1){

for (int i= nc; i n; i += nc+nc){

if (M[i+j]==Min)

M[i+j] = (M[i+j+nc-ncn1] + M[i+j-nc+ncn1])/2.+R();

if (M[i+j+nc]==Min)

M[i+j+nc] = (M[i+j+nc+ncn1] + M[i+j+nc-ncn1])/2.+R();

if (M[i+j+ncn1]==Min)

M[i+j+ncn1] = (M[i+j-nc+ncn1] + M[i+j+nc+ncn1])/2.+R(); }}

rnd /= 2.;}

}

public void destroy() {

removeMouseListener(this);

removeMouseMotionListener(this);

}

public void mouseClicked(MouseEvent e){} // event handling

public void mousePressed(MouseEvent e) {

mx0 = e.getX(); my0 = e.getY();

if ( e.isControlDown() ){

setup();

repaint();}

if ( e.isAltDown() ){

if ( e.isShiftDown() ){ n /= 2; if (n 1) n = 1;}

else n *= 2;

setup();

repaint();}

e.consume();

}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseDragged(MouseEvent e) {

int x1 = e.getX(); int y1 = e.getY();

if ( e.isShiftDown() ) scale *= Math.exp(-(y1 - my0)/(double)w);

else fiX += dfi*(y1 - my0);

fiY += dfi*(x1 - mx0); mx0 = x1; my0 = y1;

rotate();

repaint();

e.consume();

}

public void rotate(){

double ct = Math.cos(fiX), cf = Math.cos(fiY),

st = Math.sin(fiX), sf = Math.sin(fiY),

m00 = scale*cf, m02 = scale*sf,

m10 = scale*st*sf, m11 = scale*ct, m12 = -scale*st*cf;

m20 = -ct*sf; m21 = st; m22 = ct*cf;

for (int i = 0; i n1; i++)

for (int j = 0; j n1; j++){

vert1[i][j][0] = m00*vert[i][j][0] + m02*vert[i][j][2];

vert1[i][j][1] = m10*vert[i][j][0] + m11*vert[i][j][1] + m12*vert[i][j][2];}

for (int i = 0; i n; i++)

for (int j = 0; j n; j++)

for (int k = 0; k 2; k++)

Norm1z[i][j][k] = m20*Norm[i][j][k][0] + m21*Norm[i][j][k][1] +

m22*Norm[i][j][k][2];

painted = false;

}

public void mouseMoved(MouseEvent e) {}

public void paint(Graphics g) {

if ( !painted ){

buffGraphics.clearRect(0, 0, w, h);

int ib=0, ie=n, sti=1, jb=0, je=n, stj=1;

if (m20 0){ ib = n; ie = -1; sti = -1;}

if (m22 0){ jb = n; je = -1; stj = -1;}

for (int i = ib; i != ie; i += sti)

for (int j = jb; j != je; j += stj){

if (Norm1z[i][j][0] 0){

xPol[0] = w2 + (int)vert1[i][j][0];

xPol[1] = w2 + (int)vert1[i+1][j][0];

xPol[2] = w2 + (int)vert1[i+1][j+1][0];

yPol[0] = h2 - (int)vert1[i][j][1];

yPol[1] = h2 - (int)vert1[i+1][j][1];

yPol[2] = h2 - (int)vert1[i+1][j+1][1];

buffGraphics.setColor(col[iCol[i][j][0]][(int)(Norm1z[i][j][0])]);

buffGraphics.fillPolygon(xPol,yPol, 3);}

if (Norm1z[i][j][1] 0){

xPol[0] = w2 + (int)vert1[i][j][0];

xPol[1] = w2 + (int)vert1[i][j+1][0];

xPol[2] = w2 + (int)vert1[i+1][j+1][0];

yPol[0] = h2 - (int)vert1[i][j][1];

yPol[1] = h2 - (int)vert1[i][j+1][1];

yPol[2] = h2 - (int)vert1[i+1][j+1][1];

buffGraphics.setColor(col[iCol[i][j][1]][(int)(Norm1z[i][j][1])]);

buffGraphics.fillPolygon(xPol,yPol, 3);} }

painted = true;}

g.drawImage(buffImage, 0, 0, this);

showStatus( "n=" + n);

}

public void update(Graphics g){ paint(g); }

}

现在要用JAVA绘制3D立体图像,请大师指点,谢谢!!

你可以先去【绘学霸】网站找“3d建模”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: ;tagid=307zdhhr-11y04r-175539509341845604

想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。

自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。

王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: ;zdhhr-11y04r-175539509341845604

在“3d建模”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。

大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载:

java语言用什么实现3d圆环图

可参考 孙博文 的一本书 分形算法与程序设计: Java实现 里面有3D的内容

貌似要下载 JAVA3D 的msi安装包 解压后得到jar包 JAVA 3D已经被淘汰 可能有点难找

java求解 我要用一维直线分形法画一座山 就是用递归分割和中点置换 我写好了代码但是无法出图 也运行不了

main 方法只是new.调用了无参构造函数...其他的方法没有做任何操作怎么会出图呢

java怎么画出 3D 效果的图像?

可参考 孙博文 的一本书 分形算法与程序设计: Java实现 里面有3D的内容

貌似要下载 JAVA3D 的msi安装包 解压后得到jar包 JAVA 3D已经被淘汰 可能有点难找

用Java3D编程就行了 你先把那书上关于3D的代码 稍微看一下 编程的思路也就是 先建立一个场景(有光) 然后空间描点 画线 着色 之类的 可以参考具体的Java 3D 的书 貌似大多是英文的

编程也可以参考官方API文档

关于分形java和分形几何学的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。