Thursday, May 30, 2013

Tutorial kubus dengan javaFX

Berikut ini adalah sambungan tutorial tentang efek kompiz dengan javaFX. Kebetulan saya masih bingung bagaimana membuat ritasinya secara acak, saya harap pembaca bisa melanjutkannya. Soalnya kalo cuma rotasi satu arah, mungkin agak mudah, tapi katika rotasinya sudah dicampur-campur vertikal-horizontal maka si kubusnya akan kebingungan menentukan arah dan koordinat.

sampai detik ini saya masih berfikir bagaimana cara menggeneralisirnya. Saya harap sedikit tutorial ini bisa membantu pembaca dalam memahami bahasa pemrograman java.



adapun source codenya anda bisa download di sini:

https://docs.google.com/file/d/0B1irLqfPwjq0THZoODdpT0tpQzQ/edit?usp=sharing

Wednesday, May 29, 2013

Animasi bola dengan JavaFX

Nah ini adalah kelanjutan dari tutorial sebelumnya tentang rotasi pada JavaFX:



Anda tinggal menambahkan sedikit sentuhan untuk memberi efek rotasi dengan trigger mouse...
selamat mencoba..!
package fjr.booksample;

import org.omg.CORBA.Environment;

import javafx.scene.transform.Rotate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.GroupBuilder;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Slider;
import javafx.scene.control.SliderBuilder;
import javafx.scene.image.Image;
import javafx.scene.image.ImageViewBuilder;
import javafx.scene.layout.StackPane;


/**
 * cari gambar sebanyak 46 buah (bisa juga sejumlah lain tapi biar mudahnya pake 46).. 
 * kemudian namakan dengan pic1.jpg, pic2.jpg dst.... liat method getArrayImage di bawah.. :D 
 * 
 * @author meta alias trisna utami yang pacarnya suka ama lev landau... :D
 */
public class MakeABall extends Application {

 static final int NUM_ARRAY = 46;

 private void init(Stage primaryStage) {
  final Group root = new Group();
  StackPane mainPane = new StackPane();
  mainPane.setMinSize(800, 600);

  primaryStage.setScene(new Scene(mainPane));

  Image[] images = MakeABall.getArrayImage();
  final  Group mainEnsembel = new Group();

  int a = 0;
  Image[] imageA = new Image[12];
  for (int i = 0; i < imageA.length; i++) {
   imageA[i] = images[a];
   a++;
  }
  ImageEnsembel ensembelA = new ImageEnsembel(imageA, 0, 153);
  ensembelA.setTranslateX(200);
  ensembelA.setTranslateY(200);
//  ensembelA.ry.setAngle(12);
  mainEnsembel.getChildren().add(ensembelA);

  Image[] imageB = new Image[10];
  for (int i = 0; i < imageB.length; i++) {
   imageB[i] = images[a];
   a++;
  }

  Group ensembelB = new ImageEnsembel(imageB, 30, 140);
  ensembelB.setTranslateX(200);
  ensembelB.setTranslateY(290);
  mainEnsembel.getChildren().add(ensembelB);

  Image[] imageC = new Image[10];
  for (int i = 0; i < imageC.length; i++) {
   imageC[i] = images[a];
   a++;
  }

  ImageEnsembel ensembelC = new ImageEnsembel(imageC, 30, 140);
  ensembelC.setTranslateX(200);
  ensembelC.setTranslateY(150);
  ensembelC.rz.setAngle(180);
  mainEnsembel.getChildren().add(ensembelC);
  
  
  Image[] imageD = new Image[6];
  for(int i =0 ;i < imageD.length; i++){
   imageD[i] = images[a]; 
   a++; 
  }
  
  ImageEnsembel ensembelD = new ImageEnsembel(imageD, 65, 110);
  ensembelD.setTranslateX(200);
  ensembelD.setTranslateY(355);
  mainEnsembel.getChildren().add(ensembelD);
 
  
  
  Image[] imageE  = new Image[6]; 
  for(int i =0 ; i< imageE.length ; i++){
   imageE[i] = images[a] ;
   a++; 
  }
//  
  ImageEnsembel ensembelE = new ImageEnsembel(imageE, 65, 110); 
  ensembelE.setTranslateX(200);
  ensembelE.setTranslateY(85);
  ensembelE.rz.setAngle(180);
  mainEnsembel.getChildren().add(ensembelE);
  
  Image[] imageF = new Image[2]; 
  for(int i =0 ; i< imageF.length ; i++){
   imageF[i] = images[a] ;
   a++; 
  }
  
//  ImageEnsembel ensembelF = new ImageEnsembel(imageA, 0, 180);
//  ensembelF.setTranslateX(210);
//  ensembelF.setTranslateY(210);
//  ensembelF.rz.setAngle(90);
  
//  mainEnsembel.getChildren().add(ensembelF);
  
  
  mainEnsembel.setRotationAxis(Rotate.Y_AXIS);
//  mainEnsembel.setRotate(90);
  root.getChildren().add(mainEnsembel);

  final Group xGroup = new Group();
  xGroup.getChildren().add(root);
  final Slider slider = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .value(50).maxHeight(70).translateX(-230).translateY(-200)
    .build();
  slider.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.X_AXIS);
    if (slider.getValue() < 50) {
     root.setRotate(slider.getValue() - 50);
    } else {
     root.setRotate(slider.getValue() - 50);
    }
   }
  });

  final Slider slider2 = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-200).translateY(-200).build();

  slider2.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    mainEnsembel.setRotationAxis(Rotate.Y_AXIS);
    mainEnsembel.setRotate(slider2.getValue() * 2);
   }
  });

  root.setRotationAxis(Rotate.X_AXIS);
  mainPane.getChildren().add(xGroup);
  

  mainPane.getChildren().addAll(slider, slider2);
  primaryStage.setResizable(true);
 }




 class ImageEnsembel extends Group implements Cloneable
 {
  
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
  
  public ImageEnsembel(Image[] images, double angles, double space) 
  {
   super();
   double angle = 0;
   double jarak = 360 / images.length;
   getTransforms().addAll(rx,ry,rz);
   for (int i = 0; i < images.length; i++) {
    Xform xform = new Xform();
    xform.getChildren()
      .add(ImageViewBuilder.create().image(images[i])
        .fitWidth(60).fitHeight(50)
        .preserveRatio(false)
        .rotationAxis(Rotate.Y_AXIS).rotate(90).build());
    xform.rz.setAngle(angles);
    xform.setTranslateX(space);
    Xform xform1 = new Xform();
    xform1.getChildren().add(xform);
    xform1.ry.setAngle(angle);
    getChildren().add(xform1);
    angle += jarak;
   }
  }
  
  public Object clone() throws CloneNotSupportedException{
   return super.clone();
  }
 }

 static String[] getArrayString() {
  String[] array = new String[NUM_ARRAY];
  String a = "pic";
  for (int i = 0; i < array.length; i++) {
   array[i] = a.concat(Integer.toString(i + 1).concat(".jpg"));
  }
  return array;
 }

 static Image[] getArrayImage() {
  Image[] array = new Image[NUM_ARRAY];
  String[] arrStr = getArrayString();
  for (int i = 0; i < array.length; i++) {
   array[i] = new Image(MakeABall.class.getResource(arrStr[i])
     .toExternalForm());
  }
  return array;
 }

 class Xform extends Group {
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);

  public Xform() {
   super();
   getTransforms().addAll(rz, ry, rx);
  }
 }

 @Override
 public void start(Stage primaryStage) throws Exception {
  init(primaryStage);
  primaryStage.show();
 }

 public static void main(String[] args) {
  launch(args);
 }
}

Monday, May 27, 2013

Bikin Animasi Compiz di JavaFX

Berikut ini akan saya berikan bagaimana caranya membuat "semacam piring" dengan javaFX. Jika anda sudah bisa memahami tutorial kali ini, saya yakin anda bisa membuat banyak hal yang menarik.



adapun sourcenya:
package fjr.booksample;
 
import javafx.scene.transform.Rotate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Slider;
import javafx.scene.control.SliderBuilder;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
 
//author fajar
public class MakeABall extends Application {
 
  private void init(Stage primaryStage) {
  final Group root = new Group();
  StackPane mainPane = new StackPane();
  mainPane.setMinSize(500, 500);
 
  primaryStage.setScene(new Scene(mainPane));
 
  Group ensembel = new Group();
  double angle = 0;
  for (int i = 0; i < 10; i++) {
   Rectangle rect = RectangleBuilder.create().width(100).height(100)
     .rotationAxis(Rotate.Y_AXIS).rotate(90).fill(getColor()[i])
     .build();
   Xform xform = new Xform();
   xform.getChildren().add(rect);
   xform.rz.setAngle(45);
   xform.setTranslateX(200);
   Xform xform1 = new Xform();
   xform1.getChildren().add(xform);
   xform1.ry.setAngle(angle);
   ensembel.getChildren().add(xform1);
   angle += 36;
  }
 
  ensembel.setTranslateX(200);
  ensembel.setTranslateY(200);
  ensembel.setRotationAxis(Rotate.Z_AXIS);
  root.getChildren().add(ensembel);
 
  final Slider slider = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-230).translateY(-200).build();
  slider.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.X_AXIS);
    root.setRotate(slider.getValue());
   }
  });
 
  final Slider slider2 = SliderBuilder.create()
    .orientation(Orientation.VERTICAL).minWidth(50).minHeight(50)
    .maxHeight(70).translateX(-190).translateY(-200).build();
 
  slider2.valueProperty().addListener(new ChangeListener() {
   @Override
   public void changed(ObservableValue arg0,
     Number arg1, Number arg2) {
    root.setRotationAxis(Rotate.Y_AXIS);
    root.setRotate(slider2.getValue());
   }
  });
 
  mainPane.getChildren().add(root);
  mainPane.getChildren().addAll(slider, slider2);
  primaryStage.setResizable(true);
 }
 
 Color[] getColor() {
  Color[] colors = new Color[10];
  colors[0] = Color.ALICEBLUE;
  colors[1] = Color.RED;
  colors[2] = Color.YELLOW;
  colors[3] = Color.YELLOWGREEN;
  colors[4] = Color.ALICEBLUE;
  colors[5] = Color.AQUAMARINE;
  colors[6] = Color.BISQUE;
  colors[7] = Color.BLUEVIOLET;
  colors[8] = Color.BROWN;
  colors[9] = Color.BURLYWOOD;
  return colors;
 }
 
 class Xform extends Group {
  final Rotate rx = new Rotate(0, Rotate.X_AXIS);
  final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
  final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
 
  public Xform() {
   super();
   getTransforms().addAll(rz, ry, rx);
  }
 }
 
 @Override
 public void start(Stage primaryStage) throws Exception {
  init(primaryStage);
  primaryStage.show();
 }
 
 public static void main(String[] args) {
  launch(args);
 }
}

Friday, May 24, 2013

tutorial rotating panel dengan java-FX

Pada tutorial kali ini saya akan memberikan contoh tentang apa saja yang bisa dilakukan dengan Java-FX dan kemungkinan belum bisa diaplikasikan pada Swing (Entahlah saya juga g tau). Anda bisa melihat demonya pada video berikut.

Untuk software-nya anda bisa coba download di sini:
https://docs.google.com/file/d/0B1irLqfPwjq0Y25pTjZXMjBPc0E/edit?usp=sharing
Sebenarnya ini hanya hasil interpolasi dari sampel-sampel pada java-FX. Jadi anda bisa mencobanya sendiri di rumah.

Tuesday, May 7, 2013

PR 3 mekanika statistik: Penjelasan ekspansi virial transfer matriks dll

Pada tulisan ini saya memposting hasil pekerjaan rumah mekanika statistik. Di mana isinya mencakup bahasan mengenai ekspansi cluster, ekspansi virial, model ising, mean field theori dan transfer matrix.



Adapun link downloadnya ada di sini:
https://docs.google.com/file/d/0B1irLqfPwjq0dm9IOHlVak5uSTg/edit

Jika anda tertarik memodifikasi source latex-nya bisa dilihat di sini:
https://gist.github.com/gunungloli666/5527314