Tuesday, October 29, 2019
Tuesday, May 24, 2016
Friday, March 4, 2016
Cluster Growth Simulation.
"""
Cluster
"""
import numpy as np #untuk operasi array
import matplotlib.pyplot as plt #untuk gambar grafik
import matplotlib.animation as animation #untuk menggerakkan grafik
fig, ax = plt.subplots()
plt.ylim(0,40)
plt.xlim(0,40)
#variabel
n = 39
x = 19
y = 19
a = np.zeros((n,n))
a0 = np.zeros((n,n))
a0[x,y] = 1
a[:,:]=a0[:,:]
#print a
#membuat garis/kurva dengan sumbu-x adalah x, sumbu-y adalah y
line, = ax.plot(x, y, 'o')
def animate(i):
global line
for i in np.arange(1,n-1):
for j in np.arange(1,n-1):
if a0[i,j]==1:
x = i + np.random.randint(-1,2)
y = j + np.random.randint(-1,2)
if a[x,y]!=1:
a[x,y] = 1
line, = ax.plot(x,y,'o')
a0[:,:] = a[:,:]
return line,
ani = animation.FuncAnimation(fig, animate, frames=2000, interval=100, blit=False)
ani.save('cluster.mp4',bitrate=1024)
#plt.show()
Thursday, November 21, 2013
Sumur tanpa Bayangan, Miring, Nol, dan Radioaktif
"Jadi cara menentukan keliling bumi dan sumur adalah dengan cara membandingkan bayangan yang jatuh di sumur kita di siang hari tepat jam duabelas dan sumur lain yang tidak punya bayangan di tempat lain.
"Jika kita tahu jarak kita ke tempat sumur tanpa bayangan tesebut maka kita bisa membuat perbandingan.
"Misal sudut bayangan yang jatuh di sumur kita adalah theta, maka perbandingannya adalah theta dengan 360 dan jarak ke tempat sumur tanpa bayangan dengan keliling bumi.
"Karena kita tahu nilai theta dan jarak ke sumur tanpa bayangan, maka keliling bumi dapat dihitung.
θ/360=jarakKeSumurTanpaBayangan/KelilingBumi
"Sehingga KelilingBumi=jarakKeSumurTanpaBayangan x 360/θ"
"Nol itu nilai apa pak?"
"Nol mana?"
"Di atas 360 itu"
"Oh itu bukan nol tapi theta"
"theta itu apa pak?"
"Theta itu sudut kemiringan sumur, baik saya ganti simbolnya menjadi alpha saja"
"Alpha itu zat radiokatif ya pak?"
"..." (hapus simbol alpha dan diganti dengan tulisan 'sudut')
(suasana di pelatihan guru pembimbing olympiade sains)
Friday, November 16, 2012
Bouncing Ball using Array in HTML5
aBola = new array()
that come as standart on many language, but prefer
aBola = []
instead, just like list on python. In this program, array's just like container for ball.
In html5, moving an object is a bit tricky and, for some Pascal programmer like me, bringing an old memory of draw-clear-draw-clear... cycle; draw a ball, delete it, draw the same ball but slightly right, delet it, ... and so on. All that kind of tedious job, but it worth for the sake of fast execution and no-need-slow-loading-flash-player thing.
(to be continued)
//bola:ball
//pantul:bounce
var context;
var n=10;
// membuat bola
function bola(color, r,dx,dy){
this.canvas = canvas;
this.context = canvas.getContext('2d');
this.r = r;
this.x =Math.random()*400+30;
this.y = Math.random()*250+30;
this.dx = dx;
this.dy = dy;
this.color = color;
}
bola.prototype.Create = function (){
this.context.beginPath();
this.context.fillStyle = this.color;
this.context.arc(this.x,this.y,this.r,0,Math.PI*2,false);
this.context.fill();
}
bola.prototype.Pantul = function (){
if (this.x >= (canvas.width - this.r) || this.x <= this.r) this.dx *= -1;
if (this.y >= (canvas.height - this.r) || this.y <= this.r) this.dy *= -1;
}
function init(){
canvas = document.getElementById("myCanvas")
context = canvas.getContext('2d');
// membuat array untuk bola
//create array for ball
aBola = [];
for (i=1;i<=n;i++){
//membuat bola sejumlah n dengan dx dan dy acak
//create n balls with random dx and dy
dx = Math.random()*10-5;
dy = Math.random()*10-5;
aBola.push(new bola('#007700', 17,dx,dy));
}
setInterval(draw,20);
}
function draw(){
context.clearRect(0,0, 500,350);
for (i in aBola) {
//menggerakkan bola
//moving balls
aBola[i].x += aBola[i].dx;
aBola[i].y += aBola[i].dy;
aBola[i].Pantul();
aBola[i].Create();
}
}
Tuesday, November 13, 2012
2D/3D Ball Collision
Head-on
The system above's easy too solve, as simple as interchanging velocity (in elastic case).
Not head-on
###deteksi tumbukan antar bola
for i in arange(jumlah):
for j in arange(i+1,jumlah):
jarak=mag(lbola[i].pos-lbola[j].pos)
if jarak<(lbola[i].radius+lbola[j].radius):
arah=norm(lbola[j].pos-lbola[i].pos)
vi=dot(lbola[i].v,arah)
vj=dot(lbola[j].v,arah)
tukar=vj-vi
lbola[i].v=lbola[i].v+tukar*arah
lbola[j].v=lbola[j].v-tukar*arah
pantul=lbola[i].radius+lbola[j].radius-jarak
lbola[i].pos=lbola[i].pos-pantul*arah
lbola[j].pos=lbola[j].pos+pantul*arah
Wednesday, September 19, 2012
Simulate Circular Motion using Visual Python
from visual import *
kotak = box(pos=vector(0, 0, 0), length=14, height=14, width=1, color = (0.7,0.7,0.7))
ball=sphere(color=color.green,radius=5)
ball.pos=vector(10,10,0)
timestep = 0.05
a=10
t = .0
omega= 10
px = label(pos=(0,-1,0), text='x = %1.5f' % pi)
py = label(pos=(0,+1,0), text='y = %1.5f' % pi)
while (1==1):
rate(100)
ball.pos.x = a*sin(omega*t)
ball.pos.y = a*cos(omega*t)
px.text = 'x = %1.5f' % ball.pos.x
py.text = 'y = %1.5f' % ball.pos.y
t=t+0.01
Friday, December 9, 2011
Input berupa Fungsi Fleksibel pada Python dengan Menggunakan Parser
Saat kita membuat sebuah aplikasi, sering kita memberi kesempatan pengguna untuk memberikan input. Misal pada program untuk menghitung akar persamaan kuadarat ax^2+bx+c, kita memberi input berupa nilai a, b dan c. Ini berarti program yang dibuat hanya dapat menyelesaikan persamaan kuadarat dengan model ax^2+bx+c. Bentuk penulisan seperti ini disebut hardcode. Bagaimana misal jika kita menginginkan akar 3x^3-3? Atau menemukan nilai y=sin(x)? Tentu saja kita harus membuat program yang baru.
Pada python ada fungsi parser yang memungkinkan kita untuk memasukkan input berupa persamaan. Dengan demikian kita dapat membuat hanya satu program untuk misal menggambar grafik suatu fungsi dengan input berupa fungsi. Kita bebas memasukkan sebarang persamaan sebagai input.
Berikut adalah contoh program untuk menentukan nilai fungsi pada sebuah peubah. Dalam hal ini fungsi yang diinputkan adalah f=sin(x)*2x^2. Program mencari nilai fungsi tersebut pada x=10.
Nugrohos-MacBook-Pro:~ nugroho$ python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from math import sin
>>> import parser
>>> f="sin(x)*2*x**2"
>>> print f
sin(x)*2*x**2
>>> y=parser.expr(f).compile()
>>> x=10
>>> print eval(y)
-108.804222178
>>>
Wednesday, November 11, 2009
Pemetaan Balik dari Bidang ke Kulit Bola
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
(x,y) adalah koordinat titik di bidang x-y sedangkan (x′,y′,z′) adalah koordinat titik pada permukaan bola (S2). Persamaan di atas memetakan titik (x′, y′, z′) pada permukaan bola ke bidang x-y (R2) di titik (x, y) menggunakan proyeksi stereografis.
Jika kita ingin melakukan sebaliknya; memetakan sebuah titik di R2 ke S2, maka kita harus mendapatkan nilai x′ yang diungkapkan dalam x dan y, hal yang sama berlaku untuk y′ dan z′.
Karena kita sudah memiliki dua persamaan (1, 2) sedangkan kita men- cari 3 variabel yang belum diketahui, maka dibutuhkan satu persamaan lagi. Syukurlah, persamaaan tersebut ada dan muncul dalam bentuk persamaan untuk kulit bola, yaitu
From Aravir (am I Physicist?) |
sehingga kita dapat mencari x′, y′ dan z′.
Persamaan 1 dan 2 dapat ditulis ulang sebagai
From Aravir (am I Physicist?) |
z′ dapat dicari dengan memasukkan 4 dan 5 ke 3
From Aravir (am I Physicist?) |
dengan memasukkan 17 ke 4 dan 5, maka didapatkan
From Aravir (am I Physicist?) |
Persamaan 18, 19 dan 17 dapat digunakan untuk memetakan titik-titik diR2 ke S2.
Berikut adalah contoh-contoh kurva di R2 yang dipetakan ke S2.
Fungsi
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
Fungsi
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
From Aravir (am I Physicist?) |
Friday, March 20, 2009
Thursday, March 19, 2009
My sky is high, blue, bright and silent.
Nugroho's (almost like junk) blog
By: Nugroho Adi Pramono