AutoCAD, Visual Basic ve Matematik

Şayet AutoCAD kod yazımında uzman hale gelmek istiyorsanız, bir noktada biraz matematik bilmeniz veya en azından öğrenme kapasitesine sahip olmalısınız. Bu tabi ki calculus matematiği olmak zorunda değil. Fakat Pisagor teoremi ve trigonometri AutoCAD gibi geometrik bir ortamda iyi arkadaşlarınız olacaktır. Bu arkadaşlara henüz sahip değil misiniz? Endişe etmenize gerek yok – AutoCAD’de kod yazımı göründüğü kadar zor değildir.

Geçenlerde bana ölçme komutunun bir yay boyunca nasıl yineleneceği soruldu – bu sorunun gerçekten (benim düşünebildiğim) basit bir cevabı yok. Ben noktaları 2 boyutlu 2B “2D” uzayda hesaplama yoluna giderdim. Bu işlem zor gelebilir; fakat Visual Basic (VB) gibi programlama dilleri bu tip işler için çok yardımcıdır ve bunun gerçekten ne kadar kolay olduğunu görünce şaşıracaksınız.

Bu amaçla, sizlere VBA kullanarak bir çemberin noktalarının nasıl hesaplanacağını ve çemberin nasıl çizdirileceğini bir alıştırma ile göstereceğim. Aslında, yay bir çember parçasıdır ve gerçekte ikisi arasında herhangi bir fark yoktur. Kolaylık olması için VBA kullanmama rağmen, bu alıştırmanın içindeki algoritma ve mantık herhangi bir programlama dilinde çalışacaktır.

Birinci Adım – Yapılacakları Anlama

Mantıken, 2 boyutlu 2B “2D” uzayda bir çember tanımlamak için, bu çemberin merkezini ve yarıçapını (veya çapını) bilme ihtiyacı duyarsınız. Bu bilgilerin AutoCAD’de CIRCLE komutu tarafından istenmesi tesadüf değildir.

Daha sonra o çemberin – tabi çemberi tanımlamış olmalısınız – çevresi üzerinde bir noktayı tanımlamak için, tek ihtiyacınız olan şey açıdır. Mantıken, o açıdan çember üzerindeki o açıdaki noktayı türetebiliriz. Yani bunu en azından aklımızda yapabiliriz. Çemberin merkezini, yarıçapını ve açıyı biliyorsak, o çemberin çevresi üzerindeki bir noktanın nasıl tanımlanacağını biliyoruz.

Artık yapmamız gereken şey bu algoritmayı ve mantığı koda dökmek.

İkinci Adım – Sinüs ve Kosinüs fonksiyonlarını Anlama

Bu iş için anahtar şeylerden bir tanesi sinüs ve kosinüs trigonometrik fonksiyonlarının kullanımı olacaktır. Ben de aslında bu fonksiyonların bu tür işler için faydalı olup olmadığının anlaşılması için bu matematiksel fonksiyonların derinlemesine incelenerek anlaşılmaları gerektiğini düşünüyorum. Aslında, okul yıllarımızda hangi trigonometrik fonksiyonun hangi durumlarda kullanılacağını ezberci yöntemle hepimize öğretildiğini düşünüyorum. Ben hiçbir zaman bu tür ezberci öğrenimin taraftarı olmadım. Her zaman prensiplerin ve teoremlerin altındaki mantığı anlamak suretiyle bu matematiksel prensipleri ve teoremleri karşılaştığım ilişkili tüm durumlar için uygulama yolunu tercih ettim. Kendi merakım ve uğraşlarım neticesinde trigonometri ve sinüs & kosinüs fonksiyonlarının tam olarak ne olduklarını anlayabilmek için kendi modelleme yöntemimi geliştirdim.

Şimdi aşağıdaki şekli inceleyelim:

Sekil-1
Uzunluğu 1 birim olan bir hipotenüsümüz (orijin noktasından açılı olarak gelen çizgi) olduğunu kabul edelim. Bu açının Sinüsü bu hipotenüsün Y ekseni üzerine izdüşümünün uzunluğudur. Yani yukarıdaki şekilde, 1 birim uzunluğunda 30° açılı hipotenüs Y ekseni üzerinde 0.5 birim uzunluğunda bir izdüşüm meydana getirecek olup; Sinüs 30 (Sin 30) = 0.5 olacaktır. İşte bu kadar basit.

Bu açının Kosinüsü de yine bu hipotenüsün X ekseni üzerine izdüşümünün uzunluğudur. Yani yukarıdaki şekilde, 1 birim uzunluğunda 30° açılı hipotenüs X ekseni üzerinde 0.866 birim uzunluğunda bir izdüşüm meydana getirecek olup; Kosinüs 30 (Cos 30) = 0.866 olacaktır.

Bu bize bir üçgende trigonometri yöntemiyle açılardan kenarların uzunluklarını nasıl hesaplayabildiğimizi göstermektedir. Şimdi hipotenüsün uzunluğunun 4 birim olduğunu kabul edelim. Kenarlar arasındaki oran hala aynı olsun; böylece üçgenin düşey kenarı (Y eksenindeki izdüşüm) uzunluğunu 4 * Sin 30 = 4*0,5 =2 birim olarak hesaplarız.

Üçüncü Adım – Kodu Yazma

Artık kodları incelemeye hazır olduğumuzu düşünüyorum. Şimdi aşağıdaki belirlediğimiz farklı verileri kabul eden ve model alanda bir nokta çizen fonksiyonu inceleyelim.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub drawPointOnCirc(xPos As Double, yPos As Double, radius As Double, angle As Double)

Dim insertPoint(2) As Double

Dim xOffset As Double

Dim yOffset As Double

Dim angleRadians As Double

Const PI As Double = 3.14159265358979

 

'VBA trigonometrik fonksiyonlarının isteği olarak dereceleri radyana dönüştürme’

angleRadians = 2 * PI * angle / 360

 

'Çemberin merkezinden X ve Y öteleme miktarlarını hesaplama’

xOffset = Cos(angleRadians) * radius

yOffset = Sin(angleRadians) * radius

 

'Mutlak uzunluk değerlerini elde etmek için öteleme miktarlarına çember merkezinin koordinatlarını ekleme’

'Çemberin çevresi üzerindeki noktanın pozisyonunu belirleme’

insertPoint(0) = xPos + xOffset

insertPoint(1) = yPos + yOffset

 

ThisDrawing.ModelSpace.AddPoint insertPoint

 

End Sub

 

Bu fonksiyon bizim için gerçekten faydalıdır. Bir çemberin çevresi üzerindeki bir yeri gösteren bir noktayı model alanda çizebiliriz. Şimdi aşağıdaki şekilde fonksiyonu çağıralım:

1

2

3

4

5

6

Sub main()

Dim n As Double

For n = 1 To 120

drawPointOnCirc 10, 10, 3, n

Next

End Sub

Yukarıdaki fonksiyon bir yay boyunca 1 derecelik artırımlarla 120 adet nokta çizecektir. Çember merkezi 10,10 koordinatında ve 3 birim yarıçaplı olarak tanımlanmıştır.

İşte bu kadar kolay!

Umuyorum ki, bu makalemde sizlere birazcık matematik bilgisinin ne kadar faydalı olabildiğini göstermişimdir. –bunun gibi fonksiyonları tekrar kullanarak ve yeni fonksiyonlar üreterek çok daha karmaşık uygulamalar yaratabilirsiniz… Sizlere iyi eğlenceler dilerken, AutoCAD ile ilgili herhangi bir probleminiz olduğu zaman benimle iletişime geçmekten çekinmemeniz gerektiğini bir kez daha hatırlatmak istiyorum.