Xây dựng cơ sở dữ liệu, vẽ dƣờng hình 2D,3D

Một phần của tài liệu Viết chương trình vẽ đường hình tàu du lịch vỏ composite hoạt động ở vùng vịnh Nha Trang (Trang 50)

3.2.2.1.Xây dựng cơ sở dữ liệu chương trình:

Đƣờng hình các mẫu tàu cao tốc vỏ Composite cĩ những đƣờng cong và độ gãy khúc đột ngột vì vậy việc vẽ đƣờng hình tàu thiết kế từ bảng tọa độ dƣờng hình tàu mẫu thƣờng gặp nhiều khĩ khăn và độ chính xác khơng cao so với tuyến hình tàu mẫu. Vấn đề này đƣợc giải quyết nhƣ sau:

Xây dựng thuật tốn tự động ghi lại tọa độ x y các điểm. nhằm tăng số lƣợng điểm cần vẽ trên đƣờng hình tàu mẫu mà bảng tọa độ khơng cung cấp đầy đủ.Sử dụng các điểm này làm cơ sở dữ liệu chƣơng trinh. Vì thế biên dạng đƣờng hình đƣợc mơ tả chi tiết hơn, đảm bảo độ chính xác và cong trơn .

Thuật tốn lấy tọa độ 2D nhƣ sau: (defun c:l2d ()

(setq tenk (getstring "Bat dau ")) (setq rong t)

(setq tdx (list) tdy (list)) (while rong

(progn

(setq p1 (getpoint "\nChon mot diem:")) (if p1

(progn

(setq tdx (append (list (rtos (car p1) 2 2)) tdx )) (setq tdy (append (list (rtos (cadr p1) 2 2)) tdy )) (setq rong t))

(setq rong nil)))) (setq tdx (reverse tdx) tdy (reverse tdy))

(princ tenk) (princ "\n") (princ "Toa do X") (princ "\n") (princ tdx) (princ "\n")

(princ "Toa do Y") (princ "\n")

(princ tdy) (princ "\n")

(alert "Chuong trinh duoc viet boi - Ho Tong Binh ")) Đây là ví dụ tọa độ biên dạng sƣờn do thuật tốn trên ghi lại:

Tọa độ x (4500.00 4559.67 4572.76 4585.31 4601.27 4608.94 4616.40 4623.67 4630.76 4637.71 4651.20 4664.17 4711.90 4754.83 4773.09 4815.16 4838.69 4870.88 4946.85 5156.49 5244.49) Tọa độ y (299.46 322.75 331.81 341.70 355.97 363.48 371.15 378.99 386.99 395.13 411.80 428.87 499.86 573.65 612.60 734.15 816.40 941.02 1275.49 2369.38 2875.86) 3.2.2.2.Thuật tốn vẽ đường hình 2D,3D:

Sử dụng thuật tốn tự động ghi lại tọa độ (x,y) ở trên làm cơ sở dữ liệu. Tên hàm thực hiện: l2d

Trình tự các bƣớc vẽ đƣờng hình hình chiếu bằng của tàu đáy bằng 16,8 mét. Các hình chiếu đứng và hình chiếu cạnh thực hiện các hàm và lệnh tƣơng tự .

a.Thuật tốn nhập thơng số của tàu:

(setq Ltk (* 1000 Ltk) Btk (* 1000 Btk)

Htk (* 1000 Htk))

(setq Lm 16800);; gán chiều dài tàu mẫu (setq Bm 4700);; gán chiều rộng tàu mẫu (setq Hm 1700);; gán chiều cao đến boong tàu (setq CDI 600);; gán khoảng cách cắt dọc 1 (setq CLI 1124);; gán khoảng cách sƣờn 1 (setq CLII 562);; gán khoảng cách sƣờn 2

(setq CBI 2400);; gán chiều rộng max của ơ lƣới hình chiếu bằng (setq CHI 2143);; gán chiều cao max ơ lƣới ở hình chiếu đứng (setq CDN 300);; gán khoảng cách các đƣờng nƣớc

(setq dx (/ Ltk Lm) dy (/ Btk Bm)

dz (/ Htk Hm));; tính tỷ số đồng dạng và gán biến

b.Thuật tốn xây dựng ơ lƣới các hình chiếu cắt dọc:

Việc xây dựng ơ lƣới chỉ áp dụng cho bản vẽ 2D Thuật tốn tự động vẽ ơ lƣới cắt dọc:

(setq P1 (LIST (* -8933.25 dx) 0) P2 (LIST (* 8933.25 dx) 0))

(command "line" p1 p2 "");; hết lệnh vẽ dọc tâm (setq k 4

i 1);; gán biến đếm (while (<= i k)

(setq P1 (LIST (* -8933.25 dx) (* (* i CDI) dy)) P2 (LIST (* 8656.87 dx) (* (* i CDI) dy))) (command "line" p1 p2 "") (adsbygoogle = window.adsbygoogle || []).push({});

(setq i (+ i 1))

Hình 3.1 Kết quả tự động vẽ ơ lƣới cắt dọc 2D

c.Thuật tốn xây dựng ơ lƣới các hình chiếu đƣờng sƣờn:

(setq k 2

i 0)

(while (<= i k)

(setq p1 (list (* i dx CLI) 0)

p2 (list (* i dx CLI) (* CBI dz))) (command "line" p1 p2 "") (setq i (+ i 1)) );; het while (setq k 10 i 0 ) (while (<= i k)

(setq p3 (list (+ (car p1) (* i dx CLII)) 0)

p4 (list (+ (car p2) (* i dx CLII)) (* CBI dz))) (command "line" p3 p4 "") (setq i (+ i 1)) );; het while ;; vẽ ngƣợc lại (setq k 7 i 1) (while (<= i k)

(setq p1 (list (- 0 (* i dx CLI)) 0)

p2 (list (- 0 (* i dx CLI)) (* CBI dz))) (0;0) (0;2400) (-8933;0) (8667;2400) CD I CBI

(command "line" p1 p2 "") (setq i (+ i 1))

) ; het while

Hình 3.2 Kết quả vẽ khung sƣờn 2D

Cấu trúc hàm và lệnh tƣơng tự để vẽ ơ lƣới của tàu thiết kế ở các hình chiếu cạnh và hình chiếu đứng. Nhƣng cĩ thêm hàm di chuyển gĩc tọa độ để vẽ hình chiếu tiếp theo.

Thuật tốn di chuyển gĩc tọa độ:Ở đây di chuyển gĩc tọa độ lên hình

chiếu đứng của tàu đáy bằng 16,8 mét

(setq p1 (list 0 (+ (/ Btk 2) (/ Btk 3)) 0)) (command "UCS" "N" p1 "")

d.Thuật tốn xây dựng đƣờng cong đƣờng nƣớc : Thuật tốn vẽ đƣờng nƣớc 1 dạng 2D:

Thiết lập các biến danh sách rỗng dựa trên các lệnh của Autolisp (setq dsm (list) dim (list))

Lập các biến danh sách tọa độ các điểm đƣờng nƣớc của tàu mẫu.

(setq tdx (list -4714.84 -4714.84 -4714.84 -4708.54 -4702.23 -4697.16 - 4692.08 -4687.96…… 6488.67 6576.33 6576.33)

tdy (list 0.00 96.82 193.63 261.42 329.20 382.50 435.80 477.44 …… 82.74 64.35 0.00)

Đếm số điểm cĩ trong danh sách tọa độ tàu mẫu và gán biến đếm (setq k (length tdy) i 0)

CDII (-8933;0) (8667;2400) (0;0) (0;2400) CDI

Nhân tọa độ tàu mẫu trong danh sách với các hệ số dx,dy tƣơng ứng và sau đĩ trả về danh sách tọa độ các điểm đƣờng hình tàu thiết kế.Gọi lệnh Spline thơng qua hàm (Command) và tiếp tục gán tọa độ của từng điểm nằm trong danh sách tàu thiết kế cho lệnh line.

(while (<= i (- k 1))

(setq tdx1 (cons (* (nth i tdx) dx) dsm) tdy1 (cons (* (nth i tdy) dy) dim) i (+ i 1))

(setq dsm tdx1 dim tdy1)) (adsbygoogle = window.adsbygoogle || []).push({});

(setq tdx (reverse dsm) tdy (reverse dim)) (princ tdx) "\n" (princ tdy) (princ) (command "line") (setq i 0 k (length tdx)) (while (<= i (- k 1))

(setq p1 (list (nth i tdx) (nth i tdy))) (command p1)

(setq i (+ i 1)) ) (command "" "" "") (setq tdy nil

tdx nil p1 nil)

Hình 3.3 Kết quả vẽ đƣờng nƣớc 1 dạng 2D

Thuật tốn vẽ đƣờng nƣớc 1 dạng 3D:

Thiết lập các biến danh sách rỗng dựa trên các lệnh của AutoLISP (setq dsm (list) dim (list) dik (list))

Lập các biến danh sách tọa độ các điểm đƣờng nƣớc của tàu mẫu. (setq tdx (list -4714.84 -4714.84 -4714.84 -4708.54 -4702.23 -4697.16 -4692.08 -4687.96…… 6488.67 6576.33 6576.33) tdy (list 0.00 96.82 193.63 261.42 329.20 382.50 435.80 477.44 …… 82.74 64.35 0.00) tdz (list 300.00 300.00 300.00 300.00 300.00 300.00 300.00 300.00 …… 300.00 300.00 300.00))

Đếm số điểm cĩ trong danh sách tọa độ tàu mẫu và gán biến đếm (setq k (length tdy) i 0)

Nhân tọa độ tàu mẫu trong danh sách với các hệ số dx,dy, dz tƣơng ứng, sau đĩ trả về danh sách tọa độ các điểm đƣờng hình tàu thiết kế.Gọi lệnh line thơng qua hàm (Command) và tiếp tục gán tọa độ của từng điểm nằm trong danh sách tàu thiết kế cho lệnh line.

(while (<= i (- k 1))

(setq tdx1 (cons (* (nth i tdx) dx) dsm) tdy1 (cons (* (nth i tdy) dy) dim) tdz1 (cons (* (nth i tdz) dz) dik) i (+ i 1)) (setq dsm tdx1 dim tdy1 (0;0) (- 4715;0) (6576;0) Ðu o ng nuoc 1

dik tdz1) )

(setq tdx (reverse dsm) tdy (reverse dim) tdz (reverse dik)) (command "line")

(setq i 0

k (length tdx)) (while (<= i (- k 1))

(setq p1 (list (nth i tdx) (nth i tdy) (nth i tdz))) (command p1) (setq i (+ i 1)));; hết hàm while (command "" "" "") ;;; vẽ đối xứng qua trục oy (command "line") (setq i 0 k (length tdx)) (while (<= i (- k 1))

(setq p1 (list (nth i tdx) (- 0 (nth i tdy)) (nth i tdz))) (command p1)

(setq i (+ i 1)) );; hết while

(command "" "" "");; hết vẽ đối xứng (setq tdy nil

tdx nil p1 nil)

Một phần của tài liệu Viết chương trình vẽ đường hình tàu du lịch vỏ composite hoạt động ở vùng vịnh Nha Trang (Trang 50)