Nugroho's blog.

Wednesday, November 11, 2009

Pemetaan Balik dari Bidang ke Kulit Bola

Pemetaan dari kulit bola ke bidang x-y mengikuti persamaan berikut.

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?)

Pemetaan Balik dari Bidang ke Kulit Bola

Pemetaan dari kulit bola ke bidang x-y mengikuti persamaan berikut.

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?)

Monday, November 9, 2009

Mencari Akar Persamaan menggunakan Python

Program berikut adalah program untuk mencari akar persamaan menggunakan metode Newton-Rhapson. Program tersebut memiliki inti di persamaan berikut:

From Aravir (am I Physicist?)


contoh-contoh programnya sebagai berikut:

mencari akar dari fungsi
From Aravir (am I Physicist?)


From Aravir (am I Physicist?)


Program diatas memiliki tebakan awal x=7, artinya program akan mencoba nilai f(7), jika f(7) bukan nol maka akan dicoba nilai x yang berikutnya sesuai dengan persamaan di atas, jika f(x)=0 maka program akan berhenti dan x adalah akar dari persamaan yang diberikan. Ketelitian program adalah 0.01, artinya jika f(x) bernilai kurang dari 0.01 maka x adalah akar dari persamaan yang diberikan. Ketelitian ini bisa diperkecil sesuai kebutuhan.

From Aravir (am I Physicist?)

dari output diatas dapat dilihat bahwa nilai x konvergen menuju ke nilai 4, sehingga dengan ketelitian 0,01 dapat simpulkan bahwa akar dari fungsi tersebut adalah 4



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?)


Ada kalanya hasil yang kita dapatkan kurang cocok, hal ini disebabkan karena iterasi yang kita tentukan terlalu sedikit, contohnya adalah fungsi berikut

From Aravir (am I Physicist?)

From Aravir (am I Physicist?)

From Aravir (am I Physicist?)


Hasil diatas memperlihatkan bahwa x belum mencapai batas kestabilan yang telah ditentukan. Untuk itu kita harus memperbanyak iterasi

From Aravir (am I Physicist?)


From Aravir (am I Physicist?)

Saturday, November 7, 2009

Simulasi Gerak Vertikal di Flash

Software yang dibuat dengan Flash ini mensimulasikan gerak vertikal dengan nilai awal kecepatan dan posisi yang dapat diubah-ubah oleh pengguna. Pengguna bisa memasukan berbagai nilai ketinggian dan kecepatan awal ke atas maupun ke bawah, atau tanpa kecepatan awal sama sekali (gerak jatuh bebas)

From Aravir (am I Physicist?)


Pada simulasi ini, rumus yang dipakai adalah:

g=10
v=v+g*dt
h=y+v*dt
(metode tersebut dinamakan metode Euler)

Nilai awal yang dibutuhkan adalah v dan h.

v adalah kecepatan awal benda; benda bisa dilempar ke atas (v positif) maupun ke bawah (v negatif)

h adalah ketinggian benda dari titik acuan (tanah).

Langkah-langkahnya adalah:
Buat document Flash baru
Buat objek
Convert objek menjadi movie
Pada instance, beri nama “bola”
Buat dua text input, pada instance masing-masing, beri nama kecepatan dan posisi
Buat tombol, pada instance, beri nama tombol
Klik frame pertama; pada jendela action ketikkan perintah berikut

kecepatan.text = 0;
posisi.text = 200;
acuan = 300;
t = 0;
dt = 0.01;
g = -10;
v = Number(kecepatan.text);
h = Number(posisi.text);
jalan = false;
bola._y = acuan-h;
_root.onEnterFrame = function() {
if (jalan == false) {
h = Number(posisi.text);
bola._y = acuan-h;
v = Number(kecepatan.text);
}
if (jalan == true) {
v = v+g*dt;
h = h+v*dt;
kecepatan.text = v;
posisi.text = h;
bola._y = acuan-h;
t+=dt;
waktu.text=t;
if (h<=0) { jalan = false; } } }; tombol.onRelease = function() { jalan = not (jalan); }; Untuk menjalankan program, tekan ctrl-enter Simulasi dapat langsung dijalankan dengan menekan tombol atau sebelum dijalankan, mengubah nilai-nilai awal. Kecepatan awal bisa diberikan, positif untuk kecepatan awal ke atas dan negatif untuk ke bawah). Posisi juga bisa diubah. Saat simulasi berjalan, posisi dan kecepatan tidak dapat kita ubah. Simulasi berhenti saat benda mencapai tanah (h=0) atau dapat kita hentikan dengan enekan tombol. Saat simulasi berhenti, kita dapat mengubah nilai posisi dan kecepatan kembali. Gambar-gambar Gambar. 1
From Aravir (am I Physicist?)


Gambar. 2

From Aravir (am I Physicist?)


Gambar. 3

From Aravir (am I Physicist?)


Gambar.4
From Aravir (am I Physicist?)


Gambar. 5

From Aravir (am I Physicist?)

Thursday, October 29, 2009

Tuesday, September 15, 2009

Sensor Gerak di MacBook Pro menggunakan Python dan AMSTracker

Sebuah diary dari album foto Facebook saya:

Software ini dibuat pada jumat pon malam sabtu wage 28-8-'09 dengan menggunakan bahasa Python setelah menyadari bahwa Macbook ku ternyata memiliki accelerometer, sebuah sensor gerak.

Software ini mensimulasikan bola-bola yang berserakan di lantai (bisa memantul) yang pergerakannya ditentukan oleh kemiringan bidang lantai. Kemiringan lantai ini diatur dengan memiringkan laptop. Detilnya agak mengerikan, tapi toh hasilnya lumayan.


Pertama menjalankan software ini kupikir ada yang salah, kok bolanya menggelinding ke kanan terus, ternyata mejaku yang miring, hei... software ini bisa buat waterpass lho.


From Aravir (am I Physicist?)

Salah satu sensor di laptop Apple merupakan sensor arah gravitasi atau sensor gerakan laptop atau sensor kemiringan. Semacam mendeteksi bidang horizontal. Aku belum menemukan cara langsung mengaksesnya tetapi ada AMSTracker yang bisa menampilkan output yang akan dipakai python untuk menentukan gerakan laptop.

Perintah untuk mengakses output sensor adalah sebagai berikut:
From Aravir (am I Physicist?)

Aku masih bingung, outputnya 3, kuanggap x, y, z. Mungkin masih ada output yang lain , tapi belum tahu cara mengetahuinya
-kalo laptop kumiringkan kiri-kanan, yang berubah x
-kalo laptop kumiringkan depan-belakang, yang berubah z
-yang y konstan menunjuk angka -1, gak tahu kenapa
Kayaknya aslinya memang sensor gravitasi, tujuan utamanya mendeteksi gerakan laptop; jika jatuh (gravitasi 0), maka harddisk otomatis berhenti.
Untuk memudahkan menjalankan software, AMSTracker dan file script python sebaiknya diletakkan di folder yang sama.



Cara menjalankannya adalah melalui perintah di console:
From Aravir (am I Physicist?)



atau buat sebuah file text berekstensi .sh yang berisi:
cd "`dirname "$0"`"
./AMSTracker -u 0.001 -s | python sensorGravitasi.py
Simpan di folder yang sama, dobelklik file tersebut untuk menjalankan software
hasilnya:


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?)

list perintah seluruhnya sebagai berikut:

#awal list program, simpan dengan nama sensorGravitasi.py#
###############
#sensor gerak
#oleh Nugroho Adi P
#bahasa: python
#
#########
import sys, os
from visual import *
from random import uniform
from visual.controls import *
scene.x=125
jumlah=19
a=vector(0,-10,0)
e=0.75
dt=0.01
s=17
b=-11
def change():
for bola in lbola:
bola.v=vector(0,uniform(0,23),0)
################
c = controls(title='Tombol-tombol', x=0,
y=0, width=100, height=300, range=200) # Create controls window
# Create a button in the controls window:
bt = toggle( pos=(0,0), width=77, height=30, text1='Jalan',
text0='Stop' )
br = button( pos=(0,100), width=77, height=30, text='Acak',
action=lambda: change())
################
box(pos=(0,b-0.5,0), height=1,length=37, width=37)
lbola=[]
for i in arange(jumlah):
bola=sphere(color=color.green)
bola.pos=vector(uniform(-s,s),uniform(-7,19),uniform(-s,s))
bola.v=vector(0,0,0)
bola.radius=uniform(1,2)
lbola.append(bola)
while 1:
c.interact()
#rate(97)
try:
line = sys.stdin.readline()
x = int(line.split()[0])
y = int(line.split()[1])
z = int(line.split()[2])
#print x, ' ',y,' ',z
except KeyboardInterrupt:
sys.exit(0)
except:
pass
if (bt.value==1):
for bola in lbola:
if bola.y-bola.radius>b:
a=vector(-x/5,-10,z/5)
bola.v=bola.v+a*dt
bola.pos=bola.pos+bola.v*dt
#tumbukan dengan lantai
if bola.y-bola.radius<=b:
bola.v.y=-bola.v.y*e
bola.pos.y=b+bola.radius+0.1
#tumbukan dengan dinding
if bola.x+bola.radius>=s:
bola.v.x=-bola.v.x*e
bola.pos.x=s-bola.radius-0.1
if bola.x-bola.radius<=-s:
bola.v.x=-bola.v.x*e
bola.pos.x=-s+bola.radius+0.1
if bola.z+bola.radius>=s:
bola.v.z=-bola.v.z*e
bola.pos.z=s-bola.radius-0.1
if bola.z-bola.radius<=-s:
bola.v.z=-bola.v.z*e
bola.pos.z=-s+bola.radius+0.1
###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
#####akhir list program###

323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)