1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

AutoLisp Öğreticisi #4- 3 Boyutlu 3B “3D” Çizgiyi Parçalara Bölme

Overview of the Function

Büyük olasılıkla, neden 3 boyutlu 3B “3D” bir çizgiyi eşit olarak bölmek için, bir Autolisp fonksiyonu yaratmak istediğimi merak ediyorsunuz.

Bunu AutoCAD‘in DEVIDE komutu yerine kullanacağım.

Bir çizginin orta noktasını hesaplayan önceki makalemi görmüş olabilirsiniz, ancak bu kez bir çizgiyi herhangi bir sayıda eşit aralıklarla bölmeme izin verecek daha genel bir fonksiyona ihtiyacım var.

Bir çizgi üzerindeki bir noktayı kolayca hesaplamak için calculus kitabımın tozunu almam gerekmişti. Aslında çıldırmak gereksiz; bu seferki işimiz de gayet basit. Şayet önceki öğreticilerde yaptığım gibi çok detaylı anlatımdan sıkıldıysanız veya nasıl yapıldığını bilmek istemiyorsanız, bu öğreticide kullanacağım fonksiyonun tamamlanmış halini aşağıda bulabilirsiniz ve kopyalayıp kullanabilirsiniz.

 

;=  Function:  div_line ( pt1 pt2 segs)
;=    Arguments:
;=        “pt1” çizginin başlangıç noktası ( x y z)

;=        “pt2” çizginin bitiş noktası ( x y z)
;=        “segs” çizginin kaç parçaya bölüneceğinin sayısı
;=
;=    Bir 3 boyutlu 3B “3D” çizgiyi eşit uzunlukta parçalara böler
;=    ve bitiş noktaları hariç iç bölüm noktaları listesini geri döndürür.

(defun div_line (pt1 pt2 segs / A B C delta p x y z pt_list)

;Vektör katsayılarını hesaplama
(setq A (- (car pt2) (car pt1)))
(setq B (- (cadr pt2) (cadr pt1)))
(setq C (- (caddr pt2) (caddr pt1)))

;– “delta” 0 ile bir arasında oran olarak ifade edilen parça uzunluğudur.
;– fonksiyon vektörü olarak kullanılacaktır.
(setq delta (/ 1.0 segs))

;–Çizgi boyunca başlangıç oranını ayarlama
(setq p delta)

;–Tüm parçalar için döngü
(repeat (- segs 1)

;– “p” oranında bölme noktasını hesaplama
(setq x (+ (car pt1) (* p A) ))
(setq y (+ (cadr pt1) (* p B) ))
(setq z (+ (caddr pt1) (* p C) ))

;– Noktayı çıktı listesine ekleme
(setq pt_list (cons (list x y z) pt_list))

;– “p” değişkenini sonraki bölme noktasına arttırma
(setq p (+ p delta))

)

;– Nokta listesini geri döndürme
(setq pt_list(reverse pt_list))

)

3 Boyutlu 3B “3D” Uzayda Çizgi Denklemi

3 boyutlu 3B “3D” uzayda bir çizginin vektörel gösterimle ifade edilen denklemi şöyledir:

    v = Ai + Bj + Ck

Burada A, B ve C sırasıyla 3 boyutlu 3B “3D” çizginin X, Y ve Z bileşenlerinin vektör katsayılarıdır. Vektör

katsayıları aşağıdaki eşitlikler kullanılarak hesaplanır:
tA = ( x – x0)     burada, x çizginin bitiş noktasının x değeri ve x0 çizginin başlangıç noktasının x değeridir.
tB = ( y – y0)     burada, y çizginin bitiş noktasının y değeri ve y0 çizginin başlangıç noktasının y değeridir.
tC = ( z – z0)     burada, z çizginin bitiş noktasının z değeri ve z0 çizginin başlangıç noktasının z değeridir.
Bir vektör her iki yönde de sonsuza uzandığından ve bir vektör o çizgide bulunan tüm noktalar olduğundan,

t değişkeni, vektör boyunca konumu temsil eden bir skaler değerdir. Vektör fonksiyonu t = 0 olduğunda, vektörü hesaplamak için kullanılan başlangıç noktasını ve t = 1’de vektörü hesaplamak için kullanılan bitiş noktasını verir.

Böylece, vektör katsayılarını aşağıdaki denklemleri kullanarak hesaplarız:

A = ( x – x0)
B = ( y – y0)
C = ( z – z0)

Elde ettiğimiz herhangi bir t pozisyonu için,  x, y ve z’yi çözmek için formülleri yeniden düzenleyelim:

    x = x0 + tA
y = y0 + tB
z = z0 + tC

Autolisp Fonksiyonunu Kodlama

1. Satır, üç veri giriş parametresi ile div_line fonksiyonunu ayarlar. İlk parametre, fonksiyonu, çizginin liste biçiminde (x y z) başlangıç noktasıdır. İkinci parametrede, aynı formda bitiş noktası ve son parametre, (tam sayı değeri olarak) çizgiyi böleceğimiz bölüm sayısıdır.

Autolisp fonksiyonunu aşağıdaki şekilde çağırın:
(div_line (list 0 0 0) (list 1 1 0) 4)
Bu çizgiyi (0, 0, 0) noktasından  (1, 1, 0) noktasına dört parçaya böler ve iç bölüm noktalarını bir listede geri döndürür:

( (0.25 0.25 0.00)  (0.50 0.50 0.00) (0.75 0.75 0.00) )

2. Satır ile 4. Satır arası, kullanılan veri giriş noktalarının vektör katsayılarını hesaplar.

5. Satır, delta değişkenine kaydedilmiş olan parça uzunluğunu hesaplar.

7. Satır, nokta hesaplamaları için, parça sayısından bir az sayıda olacak olan döngüyü başlatır.

8. Satır ile 10. Satır arası,  vektör boyunca yüzde “p” olarak bölünme noktasını hesaplar.

11. Satır, Autolisp’in cons liste oluşturucu fonksiyonunu kullanarak nokta listesini birleştirir.

12. Satır, bir sonraki bölünme noktasını hazırlamak için, “p” yüzdesini parça uzunluğu kadar arttırır.

Döngü, gerekli tüm segment noktaları boyunca yinelendikten sonra, 13. Satır nokta listesini tersine çevirir ve

bu Autolisp fonksiyonundaki son satır olduğu için, çağrılan fonksiyona veya değişkene bu listeyi döndürür.

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Görüş Aralığını Değiştirme

Revit’te plan görünüşlerinde bir nesnenin görünürlüğünü kontrol eden yatay düzlemleri oluşturabilir veya değiştirebilirsiniz. Bir plan …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.