Matematik temelli çizimler için

Program dökümü: 3D-GRAFIK, ROTASYON, F(X/Y) FONKSIYON

Bu sayımızda ve gelecek sayılarımızda, zaman zaman C64'ün matematiksel kullanımlarına yer vereceğiz. İşte bunun en güzel örneklerinden biri...

Normalde bir fonksiyonu XY-kartezyen sisteminde çizerek, o fonksiyon ile ilgili çeşitli çizimsel özellikleri çizimsel olarak görebiliriz. Ancak bu tipteki çizimlerde, her X değeri için bir Y değeri vardır. Bu kurala uymayan fonksiyonların çizimi için XYZ-kartezyen sistemine gerek duyulur. Ancak bu sistemdeki çizimleri elle yapmak, iki boyutlu kağıdımızda üç boyutlu bir cisimi canlandırmak gerçekten de çok zordur. Neden bu zor işi bilgisayara bırakmayalım.

3D-GRAFİK olarak isimlendirdiğimiz bu program, iki tür grafik çizimi yapabilmekte. Birincisi, XY-sisteminde çizilmiş bir grafiğin pozitif X-ekseni tarafında kalan belli bir kesiminin, Y-ekseni etrafında çevrilmesiyle (rotasyon) oluşan 3-boyutlu grafiği çizmek. İkincisinin ise daha değişik ve ilginç bir işlevi var. Matematikte Z=F(X,Y) olarak tanımlanan iki değişkenli fonksiyonların, her X ve Y değeri için oluşan Z değerini hesaplayarak grafiğini oluşturmak. Her programın çarpıcı sonuçlarından çeşitli örnekleri sizin için hazırladık ve yayınlıyoruz. Her grafiğin fonksiyonu ve sorulan sorulara verilmesi gereken cevaplar, o grafik ile birlikte verilmiştir.

Şimdi gelelim programların nasıl çalıştığına... Öncelikle, Makine Dili Editörü (MDE)'nin diskette veya kasette hazır olması gerekir. Çünkü her iki programın da matematiksel ve çizimsel işlemleri makine dilinde yapılmaktadır ve bu ana kısım olmadan her ikisi de çizim yapamaz. Bu nedenle 3D-GRAFİK adlı programı MDE yardımı ile yazınız ve kaydediniz. MDE'nin kullanımı ile ilgili bilgiler 1. sayımızdaki MDE yazısında bulabilirsiniz.

Şimdi de ayrı ayrı iki BASIC programını yazın ve kaydedin. Bu iki programdan birini çalıştırmak istediğinizde, önce LOAD "3D-GRAFİK",8,1 veya LOAD "3D-GRAFİK"1,1 ile disketten veya kasetten ana programı yükleyin. NEW komutunu verdikten sonra da iki BASIC programdan birini yükleyip RUN ile çalıştırın.

Her iki programın da 110. satırında bir fonksiyon belirlenmiştir. Eğer yeni bir fonksiyon çizdirmek istiyorsanız, ilk soruya çizdirmek istediğiniz fonksiyon ile cevap verin. Eğer fonksiyon vermek istemiyorsanız, sadece (RETURN) tuşuna basın. Bu durumda 110. satırdaki fonksiyon çizilecektir.

Bundan sonra, her iki program da ihtiyacını duydukları bazı sayıları sizden isteyecektir. Önceden yazılı olan değerleri kabul ediyorsanız sadece [RETURN] tuşuna basın. Eğer yeni değerler vereceksiniz, ekrana çıkan sayıların üzerine yazabilirsiniz. Şimdi de bu değerlerin hangi anlamlara geldiğini, her program için ayrı ayrı görelim.

Bu programın yaptığı işlem, XY-sisteminde çizilen bir fonksiyonu Y-ekseni etrafında döndürerek oluşan cismin 3 boyutlu görüntüsünü çizmek. Bunun için, çeşitli açıları ve bazı maksimum değerleri belirlemeniz gerekiyor.

İlk vereceğiniz değer, dönme açısı. Bu açı ile vereceğiniz değer şu anlama gelecektir. Şimdi önümüzdeki kağıda aşağıdaki gibi bir koordinat sistemi çizdiğimizi düşünelim: (X ve Y eksenlerinin yer değiştirdiğine dikkat edin!)

Eğer dönme açısı için -45 ile 90 arasında değişen değerler verirseniz, koordinat sistemimiz de aşağıdaki sınırlar arasında dönecektir:

Bakış açısı ise sizin gözünüzün, cisime kaç derece açı ile baktığınızı belirleyecektir. 0 verdiğinizde cisime tam karşıdan, 90 verdiğinizde de tam tepesinden bakmış olursunuz.

Çizgi sayısı ile de, oluşacak grafiğin sağ ve sol kenarları arasında kalan uzaklığın kaç çizgi ile temsil edilmesi gerektiğini belirleyebilirsiniz. Bir başka deyişle, fonksiyonun değerinin kaç adımda hesaplanması gerektiğini belirtmiş olursunuz. Bu değer en az 3, en fazla da 60 olabilir. Görünüş olarak en iyi değerler 10-30 arası değerlerdir.

Maksimum X değeri, çizimin yapılacağı aralığı belirler. Örneğin bir sinüs grafiği çizdireceksiniz ve maksimum X değeri olarak 5 vermişseniz, bilgisayar 0 ile 5 arasındaki fonksiyon değerlerini hesaplayarak çizimi yapar.

Artık çizim için gereken hesaplamalar başlamıştır. En fazla 5 dakika içerisinde çizimin yapılışını görürsünüz. Bu arada ufak bir şey belirtelim. Eğer bu programın çizim ve hesaplamaları BASIC ile yapılmış olsaydı, en basit grafiğin çizimi bile en az 6 saat sürerdi.

Şimdi kareli kağıdın üzerinde bir alan belirlediğimizi düşünelim. Öyle ki, bu alan aşağıdan yukarıya örneğin -5,5 arasında Y-değerlerini temsil etsin; soldan sağa da -10,10 arasındaki X-değerlerini. Şimdi kesişen her dikey ve yatay çizginin temsil ettiği X ve Y değerini elimizdeki fonksiyonun içine oturtarak (örneğin Z=SIN(X)*COS(Y)) bir Z değeri elde edelim. Daha sonra da Z kadar yüksekliğe sahip bir çubuğu bu kesişim noktasına dikelim. Bu işlemi belirlediğimiz alandaki her kesişim noktası için tekrar edelim. En sonunda da dikdiğimiz çubukların tepe noktalarını çizgilerle birleştirerek bir file görüntüsü elde edelim. İşte bu, seçtiğimiz iki değişkenli fonksiyonun 3-boyutlu grafiğidir.

Bu programda da önce dönme açısı ile bakış açısını vermeniz gerekiyor. Diğer değerler de rotasyon programdakilerle benzeşmekte. Ancak şimdi X ve Y eksenlerinin her biri değişken olduğundan daha fazla değer belirlemeniz gerekiyor.

X ve Y yönündeki çizgi sayısı ile, yukarıda olduğunu varsaydığımız alanın sağdan sola ve yukarıdan aşağı olan çizgi sayılarını saptayabilirsiniz.

Daha sonra da, yukarıda -5,5 ve -10,10 olarak örnek verdiğimiz sınırları kendi fonksiyonunuz için belirleyebilirsiniz.

Artık hesaplamalar başlayacaktır. Ancak bu seferki hesaplamalar, rotasyon programına biraz daha uzun sürecektir. Çünkü hesaplanması gereken daha çok değer vardır.

Her iki program da çizimi bitirdiklerinde, sizin bir tuşa basmanızı bekleyecektir. Eğer sola bakan ok tuşuna basarsanız, program duracaktır. Aynı fikirle devam etmek ve değişik bir görüntüsünü çizmek istiyorsanız, R veya [RETURN] tuşlarından birine basınız. Yeni bir fonksiyon çizdirmeyi düşünüyorsanız, F tuşu ile yeni fonksiyonunuzu verebilirsiniz. Veya S tuşu ile o anda oluşturduğunuz grafiği SAVE edebilirsiniz (başka grafik programlarında kullanmak veya bir HARD-COPY programı ile bastırmak için).

Programlar, ana programdaki (3D-GRAFİK) parçalarını SYS komutları ile çağırmakta. Ancak açılar ve sınırlar gibi sizin belirlediğiniz değerler, ana programa, NN%, KK%, DD, PP... gibi değişkenler ile gönderilmektedir. Ana program önce bu değişkenlerdeki değerleri okumakta ve buna göre işlemlerini yapmakta. Bu nedenle, programda kullanılan değişken adlarını değiştirmemeniz gerekiyor.

Fonksiyonları verirken, fonksiyonlardaki tanımsız noktalar bulunmamasına dikkat edin. Örneğin bir sayıyı sıfıra bölmek veya eksi bir sayının karekökünü veya logaritmasını almak gibi. Bu gibi durumlarda, bilgisayar kilitlenecektir. Eğer hesaplama 5 dakikadan uzun sürerse, RUN-STOP/RESTORE tuşları ile programı durdurup, 110. satırı kontrol edin. Bir örnek verelim: Z=LOG(X*X+Y*Y) fonksiyonu, X ve Y sıfır olduğu zaman, tanımsız olan LOG(0) işlemini yapacaktır ve bu da C64'ün kilitlenmesine yol açacaktır.

Halbuki Z=LOG(X*X+Y*Y+.01) fonksiyonu yukarıdaki fonksiyon ile hemen hemen aynı grafiğe sahip olmasına rağmen, hiçbir zaman bu hataya yol açmayacaktır. Buna ilişkin ufak tefek bazı programlama hileleri, örnek grafiklerin fonksiyonlarında da kullanılmıştır. Onları inceleyebilirsiniz.

Çıkabilecek bir diğer sorun da, C64'ün grafik ekranının yapısı ile ilgili bir sorun. Eğer çizimi yapılan grafiğin, yukarıdan aşağıya olan büyüklüğü ekrana sığmazsa ekranda hiç de hoş olmayan dik çizgiler belirebilir. Bunu önlemek için tüm fonksiyonu belli bir sayıya bölün. Örneğin EXP(X/4)*COS(Y) fonksiyonu ekrana sığmaz. Ancak EXP(X/4)*COS(Y)/10 aynı grafiğin yüksekliği daha az olan bir türünü verir ve ekrana sığar. Eğer grafiğin çok ufak bir kısmı dışarıda kalıyorsa, açılarla oynayarak da grafiği ekranın ortasına çekebilirsiniz.

Artık bu kadar laf yeter. En iyi öğretmen, kişinin kendi deneyimleridir. Verdiğimiz örnek grafikler üzerinde çalışarak verdiğiniz her değerin etkisini görebilir, yeni yeni grafikler üretebilirsiniz. Bu arada ufacık bir belirtme daha... Verdiğimiz örneklerden sadece 4 tane sayıya sahip olanlar rotasyon programı için, 8 sayılı olanlar ise F(X,Y) programına ait.

Bu yazıdaki programlar

Dergideki dökümlerden çıkarıldı; satırlar derginin kontrol toplamlarıyla doğrulandı ve programlar VICE emülatöründe denendi. Tarayıcıdaki C64'te çalıştırabilir, indirip bir emülatöre sürükleyip bırakabilir ya da gerçek bir C64'te LOAD "AD",8,1 ile yükleyebilirsiniz. "Sorun bulundu" yazanlarda bazı satırlar okunamadı ya da tutmadı; düzeltilmiş bir sürümünüz varsa contact@coze.org adresine gönderin.