/** * cicloide sferica * * @author (sergio savoldelli) * @version ( version number 3) */ import java.awt.Stroke; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.border.*; import java.awt.image.*; import java.awt.geom.*; import static java.lang.Math.*; public class sfera_pois4f extends JApplet implements MouseListener,MouseMotionListener { public double puntox, puntoy, a,ci = 1,can= 0.4 ; public double pi2=PI*2; public double pi=3.14159265; public double xz = 0.0; public int mov1,mov2,mov3,mov4,qq; public double hh ,k0,k02,r0,r02,yz,w1,incpasso,ipasso,incpassob,ipassob,x0,y0,z0,z02,x02,y02,lbx,lby,ll,qq2, xe2,ye2,aa2,ab5,ab6,ab7,zi,hh2,rp,aab,rg; public void init() { FlowLayout flow = new FlowLayout(); addMouseListener(this); addMouseMotionListener(this); rp=50*can;rg=100; setSize(250, 250); a=24; setBackground (new Color(0,0,0)); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; BufferedImage bufimage; BufferedImage bi,co; Graphics2D bufimagegraf ; Graphics2D big,cog,cogb ; BufferedImage buffImg = new BufferedImage(250, 250, BufferedImage.TYPE_INT_ARGB); Graphics2D gbi = buffImg.createGraphics(); bufimage = new BufferedImage(250, 250, BufferedImage.TYPE_INT_ARGB); bufimagegraf= bufimage.createGraphics(); bufimagegraf.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); bufimagegraf.setColor(new Color(255,0,0)); bufimagegraf.setStroke(new BasicStroke(2.5f)); bi = new BufferedImage(250, 250, BufferedImage.TYPE_INT_ARGB); big = bi.createGraphics(); big.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); big.setColor(new Color(0,255,0)); big.setStroke(new BasicStroke(1.3f)); co = new BufferedImage(250,250,BufferedImage.TYPE_INT_ARGB); cog = co.createGraphics(); cog.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); cog.setColor(new Color(255,0,255)); cog.setStroke(new BasicStroke(1.05f)); g2. setColor(new Color(0,0,0)); g2.fillRect (0, 30, 250, 230); puntox=150;puntoy=150; for(hh2=0;hh2<=PI;hh2=(hh2+PI/(a/2))){ for(aab=(-PI);aab<=(PI);aab=aab+PI/(a*2)){ xe2= aab; ye2= hh2; k02= (Math.cos(xe2)*Math.cos(ye2)*(rg)); y02= (Math.cos(xe2)*Math.sin(ye2)*1); z02= (Math.sin(xe2)*(rg)); x02=(k02+130); r02= (y02)+135+((z02)); cog.draw( new Ellipse2D.Double((int)(x02),(int)(r02),1,1));//le sfere } } g2.drawImage(co,0,0, this); zi=0; qq=0;ll=0; for(hh=-PI;hh<=PI;hh=(hh+PI/(a*5))){ ll= PI+hh; qq=(int) (cos(ll)*100)+100; qq2=(int) (sin(ll)* 25)+125; zi=zi+PI/120; ab6= (cos(zi+PI/2))*(rp);//regola il diametro della ruota piccola incpasso= 130+(cos(zi)*(rg-(rp)));//*184 era incpassob= 130+(cos(zi)*(rg-(rp)))+ab6;//centro della ruota piccola ipasso= (130-rp+sin(zi)*rp); ipassob=(130-rp+sin(zi)*rp)+(rp);//ques w1= ceil(rg/rp); g2.drawImage(co,0,0, this); try{ Thread.sleep(15); } catch(InterruptedException ev){ } for(aa2=(0+zi*w1);aa2<=(pi2+zi*w1);aa2=aa2+pi/5){ ab5= cos(aa2)*(ab6); // punti della circonferenza piccola ab7= sin(aa2)*(rp); lbx=ab5+incpasso+ab6;// che vengono aggiunti alle coordinate della circonferenza grande quando queste si spostano sullo schermo lby=ab7+ipasso+(rp); bufimagegraf.draw( new Line2D.Double((int)(130),(int)(130),(int)lbx,(int)lby)); //quelle rosse bufimagegraf.draw( new Line2D.Double((int)(incpassob),(int)(ipassob),(int)lbx,(int)lby));// linee che partendo dal centro del cerchio piccolo incpassob=lbx; ipassob= lby; // formano il cerchio piccolo stesso } g2.drawImage(bufimage,null,0,0); big.fillOval((int)(ab5+incpasso+ab6),(int)(ab7+ipasso+(rp)),4,4);// pallino della curva g2.drawImage(co,0,0, this); g2.drawImage(bi,0,0, this); bufimagegraf.clearRect(18,125-(int)(rp*2.1),252-(int)(rp*1.5),(int)(rp*4.85)); } } public void mouseClicked(MouseEvent evt) { Object source = evt.getSource(); //; int aaaa= evt.getButton(); if ( aaaa == 1){ can= (can+0.2)%0.61; rp= 50*can; } repaint(); } public void mousePressed(MouseEvent e) { Object source = e.getSource(); mov2 = e.getX(); int mov3 = e.getY(); e.consume(); } public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mouseDragged(MouseEvent e) { } public void destroy() { removeMouseListener(this); removeMouseMotionListener(this); } }