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
Sesungguhnya shalat itu mencegah dari (perbuatan-perbuatan) keji dan mungkar
Q.S. Al-'Ankabut Ayat 45
Thursday, May 30, 2013
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..!
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:
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.
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
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
Thursday, April 25, 2013
Monday, April 22, 2013
Persamaan differensial.
Persamaan
differensial.
Persamaan
differensial itu sangat penting dalam dunia fisika. Persamaan
differensial merupakan metode untuk merumuskan objek fisis yang
paling tinggi hanya mempunyai percepatan (perubahan kecepatan1)
ke dalam bentuk matematis. Menurut sejarah orang yang pertama
merumuskan persamaan differensial adalah Issac Newton2.
Berbeda dengan bentuk-bentuk matematis lainnya (baik identitas maupun
persamaan, pertidaksamaan atau apalah), persamaan differensial harus
berangkat dari objek real.
Jadi
ketika kita menjumpai sebuah persamaan differensial, selanjutnya
adalah bagaimana memecahkannya untuk kasus yang kita temui. Maksudnya
persamaan differensial itu bukan sekedar pajangan dalam dunia
matematika yang belum ditahu digunakan untuk apa (misal Last Fermat
Theoreme atau Poincare Conjecture), tapi persamaan differensial itu
merupakan suatu objek yang bisa kita terapkan ke dalam tataran
praxis. Semua bentuk fisis dalam kehidupan sehari-hari tunduk pada
persamaan differensial. Sebenarnya saya sendiri kurang begitu paham
bagaimana persamaan differensial itu bisa dirumuskan. Tapi yang saya
bisa tebak, bahwa orang-orang yang merumuskan persamaan differensial
itu adalah pemikir tingkat tinggi. Jadi ketika Navier Stokes
merumuskan persamaan Navier Stokes, sebenarnya yang ada dipikirannya
itu adalah bagaimana momentum dan energi itu merambat. Ketika Newton
memikirkan hukum Newton, yang dia coba katakan itu adalah hasil
eksperimen dari Galileo tentang gerak jatuh bebas serta pergerakan
planet.
Sebenarnya
tidak ada cara umum dalam memecahkan persamaan differensial. Anda
bisa buka buku karangan Michael E. Taylor tentang persamaan
differensial parsial. Itu ada 3 jilid tebal-tebal dan tentunya bikin
pusing. Mulai persamaan yang mudah dipecahkan hingga yang susah
berupa bentuk yang non linear. Tapi berdasarkan pengalaman saya, ada
3 metode umum dalam memecahkan persamaan differensial, yakni:
a.
Separasi variabel3
b.
Menggunakan fungsi green
c.
Menggunakan deret
d.
Manipulasi matematis untuk mencari bentuk yang familiar, kemudian
integralkan.
Tapi,
bagian c saya belum temukan apa landasan formalnya sampai metode itu
digunakan, tapi yang jelas dari persamaan itulah bentuk umum
persamaan Bessel dan Legendre diturunkan.
Kemudian
berbicara mengenai kasus simetri persamaan differensial, ada 3 macam
keadaan yang umum dijumpai.
1.
Simetri bidang datar, anda hanya perlu memecahkannya pada satu sumbu
(misal sumbu x) selanjutnya untuk sumbu lain, bisa dilakukan
generalisasi dengan mudah (pada banyak kasus begitu yang terjadi :D)
2.
Simetri bola, contohnya untuk kasus elektron yang terperangkap dalam
atom (bukan elektron bebas), biasanya anda akan sampai pada persamaan
Legendre yang menghasilkan suku-suku deret Legendre.
3.
Simetri Silinder, contohnya untuk perambatan gelombang
elektromagnetik pada pandu gelombang (yang umunmnya berbentuk
silinder). Biasanya anda akan sampai pada persamaan Bessel, dan yang
mempunyai solusi umum fungsi Bessel.
Sebenarnya
mengajarkan persamaan differensial butuh kesabaran, karena umumnya
para pelajar bukan orang yang begitu tertarik dengan matematika.
Makanya pada banyak buku fisika kuantum itu, sebelum kita membahas
keadaan elektron dalam atom (dengan potensial terpusat) kita terlebih
dahulu diajarkan hal-hal yang sederhana mengenai pemecahan persamaan
Schrodinger. Misalnya potensial sumur tak hingga, potensial tangga,
dan potensial-potensial lainnya. Gunanya untuk apa, karena pada kasus
potensial tersebut, persamaan differensialnya masih mudah dipecahkan,
karena hanya melibatkan simetri bidang datar. Ketika berangkat pada
atom hidrogen di mana harus dirumuskan dalam skala 3 dimensi, maka
otomatis simetrinya adalah simetri Bola, karena elektron sendiri
mengorbit atom diasumsikan dalam orbit “bola”. Akibatnya
kemungkinan besar akan sampai pada persamaan Bessel dan akhirnya pada
fungsi Bessel yang sangat membingunkan bagi pemula.
Itu
baru simetri bola, bagaimana kalo simetri belah ketupat atau simetri
belah durian, saya ga tau fungsi apa yang digunakan. Tentunya para
pemula seperti saya ini sudah pingsan duluan.
1.
Tidak ada jaminan bahwa persamaan differensial itu harus sampe orde
2. Persamaan bousinneq itu sampe orde 4
(http://en.wikipedia.org/wiki/Boussinesq_equation_(water_waves)
)
3. Ada
banyak metode dalam separasi variabel, bukan hanya dalam bentuk
perkalian, tapi ada juga dalam bentuk penjumlahan, dan itu paling
tricky untuk dipraktekan bagi pemula:
http://ptp.oxfordjournals.org/content/105/3/379.full.pdf
Tuesday, April 16, 2013
Saturday, April 13, 2013
Subscribe to:
Posts (Atom)