Archive

Posts Tagged ‘AMSTRAD CPC464’

AMSTRAD CPC464 BASIC ile Parabolik ayna yansıma simülasyonu

24 September 2020 Leave a comment

Bu programın ortaya çıkma hikayesi de biraz ilginç. Lise 2 de okuduğum zamanlardı. Fizik dersinde optik konusu altında küresel aynaları görüyorduk. O dönemlerde paraboller konusu Lise 2 matematikte işleniyordu. Fizik dersinde hocamız sürekli küresel aynalar şöyle küresel aynaların özellikleri böyledir diye anlatırdı. Tahtaya küresel aynalar çizilir gelen ışınlar yansıtılır. bir de en önemli nokta ki benim zihnime işlemişti küresel aynanın bir odak noktası olduğu söyleniyordu. Halbuki matematik dersinde daireler işlenirken dairenin odağı olduğundan bahsedilmemişti. Eğer o sırada işlediğimiz koniklerden odağı varsa parabollerin, hiperbollerin ve elipslerin vardı. Bu blogda bahsettiğim BASIC programını ancak Lise 3’te yaza bilmiştim özellikle fonksiyonların türevleri konusu işlendikten sonra. Dersteki aynalara benzetebilmek için parabolün matematik dersinde gördüğümüz yukarı ve aşağı bakan kolları olan parabol değilde sağa bakan bir parabol tasarlamıştım. Gelelim Lise 2 deki küresel ayna meselesine. Benim kafa iki dersteki çelişkiye obsesif konpülsif bir şekilde takılmış kalmıştı. Bir gün elime pergel cetvel kağıt ve kalemi aldım ( pergel cetvel Öklid geometrisidir bu arada hatırlamakta fayda var) . Daireyi pergelle çizdim cetvel yardımıyla da ışınları optiğin yansıma kurallarına olabildiğince uymaya çalışarak küresel aynadan yansıtmaya çalışıyordum. Sonuç tahmin ettiğim gibiydi küresel aynanın bir odak noktası yoktu. Keşfettiğim şey ise Küresel aynanın odakları veya odak kümesi ayna merkez yüzeyinden r/2 (r burada dairenin yarı çapı) arasında yoğunlaşıyordu. Arşimed’in kaldırma kuvvetini bulmuş kadar sevinmiştim. Fizik hocasına gol atma pozisyonu yakalamıştım. Derste bu olaya ne kadar girmeye çalışmış olsam da fırsat bulamadım top elimde kalmıştı. Lise 3 yıllarımda üniversite sınavına hazırlanırken bir tekrar esnasında küresel aynalar karşıma yeniden çıkmıştı . Bu programı yazmamı tetiklemişti. O sıralarda programı aslında küresel aynadaki ışın yansımasını simüle ediyordu. Bu programın iki versiyonunu yazmıştım küresel ayna ve parabol aynadan yansımalarını simüle eden programlar. Böylece iki geometriyi de bilgisayar ortamında karşılaştır bilmiştim. Böylece beynimde saplanıp kalan sorunun cevabını bulmuştum. Ancak elimde parabol aynanın simülasyon programının kopyası kalmış. İlk fırsatta küresel ayna algoritmasını tekrar yazıp burada yayınlayacağım.

Epey uzun oldu sanırım bura da kesiyorum Hoşçakalın

Aşağıdaki programı gerçek bir CPC464 deneyebilirsiniz.

10  ' Programmer: Süleyman CANAN
20  ' Date : 1989
30 CLS
40 ORIGIN 100,200
50 p=800
60 REM ----------parabolün çizimi---------
70 FOR x=0 TO 150 STEP 0.5
80 y=(p*x)^(1/2)
90 PLOT x,y
100 PLOT x,-y
110 NEXT x
120 REM ---------- PARABOLDEN PARALEL IŞIN YANSIMASI---------
130 FOR h=150 TO -150 STEP -20
140 xp=((h^2)/p)
150 REM ---------- türevin hesaplanması----------
160 der=((1/2)*(p/xp)^(1/2))*SGN(h)
170 REM --------- ışınlar----------
180 FOR r=250 TO xp STEP -1
190  PLOT r,h
200 NEXT r
210 REM ----------yansıyan ışınlar-----------
220 m=(2*der)/(1-(der^2))
230 FOR xx=xp TO xp+300
240 REM  PRINT xd,yd
250 yy=m*(xx-xp)+h
260 REM PRINT xd
270 PLOT xx,yy
280 NEXT xx
290 NEXT h

Program https://benchmarko.github.io/CPCBasic/cpcbasic.html?database=storage&example=&sound=true web sayfasından deneyebilirsiniz programın bu sitede biraz daha yavaş çalışabilmesi için programa gecikmeler ekledim

10  ' Programmer: Süleyman CANAN
20  ' Date : 1989
30 CLS
40 ORIGIN 100,200
50 p=800
60 REM ----------parabolün çizimi---------
70 FOR x=0 TO 150 STEP 0.5
80 y=(p*x)^(1/2)
90 PLOT x,y
100 PLOT x,-y
110 NEXT x
120 REM ---------- PARABOLDEN PARALEL IŞIN YANSIMASI---------
130 FOR h=150 TO -150 STEP -20
140 xp=((h^2)/p)
150 REM ---------- türevin hesaplanması----------
160 der=((1/2)*(p/xp)^(1/2))*SGN(h)
170 REM --------- ışınlar----------
180 FOR r=250 TO xp STEP -1
190 PLOT r,h
200 for dly=1 to 10000
210 next dly
220 NEXT r
230 REM ----------yansıyan ışınlar-----------
240 m=(2*der)/(1-(der^2))
250 FOR xx=xp TO xp+300
260 REM  PRINT xd,yd
270 yy=m*(xx-xp)+h
280 REM PRINT xd
290 for dly=1 to 10000
300 next dly
310 PLOT xx,yy
320 NEXT xx
330 NEXT h

PC ortamında bir AMSTRAD emülatöründe programın çalıştırılması

İlk çalışma kurşun kalemle yapıldığı görülmekte. 2017 de bu sayfaları bulduğumda neler yaptığımı anlamak için tükenmez kalemle kısa bir çalışma yapmıştım

O zamanlar yazıcıların fiyatları bilgisayarlardan fazla olduğundan. Kağıt kalem tekniği ile kayda alıyorduk. Aşağıdaki resimlerde taslak algoritma çalışmalarını görebilirsiniz.