问题描述
这是源代码,据此画出来的和Koch有差距啊。那位高手指教一下怎么改?太谢谢了。importjava.awt.*;importjavax.swing.JPanel;publicclassKochPanelextendsJPanel{privatefinalintpanel_w=400,panel_h=400;privatefinaldoublesq=Math.sqrt(3.0)/6;privatefinalinttopx=200,topy=20,leftx=60,lefty=300,rightx=340,righty=300;privateintcurrent;publicKochPanel(intcurrentOrder){current=currentOrder;setBackground(Color.black);setPreferredSize(newDimension(panel_w,panel_h));}publicvoiddrawFractal(intorder,intx1,inty1,intx5,inty5,Graphicspage){intdeltaX,deltaY,x2,y2,x3,y3,x4,y4;if(order==1)page.drawLine(x1,y1,x5,x5);else{deltaX=x5-x1;deltaY=y5-y1;x2=x1+deltaX/3;y2=y1+deltaY/3;x3=(int)((x1+x5)/2+sq*(y1-y5));y3=(int)((y1+y5)/2+sq*(x5-x1));x4=x1+deltaX*2/3;y4=y1+deltaY*2/3;drawFractal(order-1,x1,y1,x2,y2,page);drawFractal(order-1,x2,y2,x3,y3,page);drawFractal(order-1,x3,y3,x4,y4,page);drawFractal(order-1,x4,y4,x5,y5,page);}}publicvoidpaintComponent(Graphicspage){super.paintComponent(page);page.setColor(Color.green);drawFractal(current,topx,topy,leftx,lefty,page);drawFractal(current,leftx,lefty,rightx,righty,page);drawFractal(current,rightx,righty,topx,topy,page);}publicvoidsetOrder(intorder){current=order;}publicintgetOrder(){returncurrent;}}importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassKochSnowflakeextendsJAppletimplementsActionListener{privatefinalintapplet_width=400,applet_height=440,min=1,max=9;privateJButtonincrease,decrease;privateJLabeltitleLabel,orderLabel;privateKochPaneldrawing;privateJPanelappletPanel,tools;publicvoidinit(){tools=newJPanel();tools.setLayout(newBoxLayout(tools,BoxLayout.X_AXIS));tools.setBackground(Color.yellow);tools.setOpaque(true);titleLabel=newJLabel("thekochsnowflake");titleLabel.setForeground(Color.black);increase=newJButton(newImageIcon("increase.gif"));increase.setPressedIcon(newImageIcon("decrease.gif"));increase.setMargin(newInsets(0,0,0,0));increase.addActionListener(this);decrease=newJButton(newImageIcon("decrease.gif"));decrease.setPressedIcon(newImageIcon("increase.gif"));decrease.setMargin(newInsets(0,0,0,0));decrease.addActionListener(this);orderLabel=newJLabel("order:1");orderLabel.setForeground(Color.black);tools.add(titleLabel);tools.add(Box.createHorizontalStrut(20));tools.add(decrease);tools.add(increase);tools.add(Box.createHorizontalStrut(20));tools.add(orderLabel);drawing=newKochPanel(1);appletPanel=newJPanel();appletPanel.add(tools);appletPanel.add(drawing);getContentPane().add(appletPanel);setSize(applet_width,applet_height);}publicvoidactionPerformed(ActionEventevent){intorder=drawing.getOrder();if(event.getSource()==increase)order++;elseorder--;if(order>=min&&order<=max){orderLabel.setText("order"+order);drawing.setOrder(order);repaint();}}}
解决方案
解决方案二:
在这里我找到了一个科赫雪花分形曲线的源代码,你可以去看一下:
解决方案三:
高手拜托啊