Rated 5/5 based on 240179 internet user reviews

Jump to content


Change Photo
- - - - -

Thuật toán nội suy cao độ tự nhiên trong Nova


  • Please log in to reply
15 replies to this topic

#1 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 03 October 2008 - 12:08 AM

Tôi đang thử viết một Lisp để tra cao độ tự nhiên ( thay cho việc tra bằng Nova). Lúc đầu tôi nghĩ thuật toán sẽ là : t́m 3 điểm gần nhất so với điểm pick chuột rồi nội suy cao độ điểm đó thông qua phương tŕnh mặt phẳng đi qua 3 điểm. Nhưng tôi đă nhầm. Thực tế đă chứng minh là nội suy như thế sai rất nhiều. Để đạt được chính xác th́ 3 điểm đó phải tạo thành 1 tam giác chứa điểm pick bằng chuột ( Cái này giống như thằng Nova tạo lưới tam giác để nội suy đường đồng mức). Để kiểm tra điều kiện 3 điểm tạo thành 1 tam giác chứa điểm pick th́ phải xử lư thuật toán như thế nào hả mọi người? Mong được chỉ giáo :cheers:
  • 0

#2 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 03 October 2008 - 10:16 AM

Để kiểm tra điều kiện 3 điểm tạo thành 1 tam giác chứa điểm pick th́ phải xử lư thuật toán như thế nào

Đă xử lư được bài toán. Nối đường thẳng từ điểm pick chuột tới 3 đỉnh th́ phải đảm bảo tổng 3 góc hợp bởi lần lượt 3 đường thẳng này là 360 độ.
  • -1

#3 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 297 posts
Danh tiếng: 132 (tàm tạm)

Gửi vào 03 October 2008 - 02:09 PM

Đă xử lư được bài toán. Nối đường thẳng từ điểm pick chuột tới 3 đỉnh th́ phải đảm bảo tổng 3 góc hợp bởi lần lượt 3 đường thẳng này là 360 độ.

E rằng như vậy cũng chưa đúng. V́ nhỡ nó lấy cái tam giác lớn th́ sao???
Như vậy phải kết hợp cả 2 điều kiện trên
  • 0

#4 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 posts
Danh tiếng: 336 (khá)

Gửi vào 03 October 2008 - 02:33 PM

Đă xử lư được bài toán. Nối đường thẳng từ điểm pick chuột tới 3 đỉnh th́ phải đảm bảo tổng 3 góc hợp bởi lần lượt 3 đường thẳng này là 360 độ.

Tôi đọc help thấy như sau:
Posted Image
bạn xem rồi dùng líp xem sao
  • 0

#5 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 03 October 2008 - 03:41 PM

E rằng như vậy cũng chưa đúng. V́ nhỡ nó lấy cái tam giác lớn th́ sao???
Như vậy phải kết hợp cả 2 điều kiện trên

Tất nhiên rồi. Xét từ 3 điểm có khoảng cách nhỏ nhất đếm điểm pick chuột. Nếu có 1 điểm nào không thoả măn sẽ bỏ qua điểm đó và thay bằng điểm tiếp theo có khoảng cách " gần thứ 4" , cứ lần lượt như vậy. Thường chỉ khoảng đến điểm "gần thứ 5" là thoả măn rồi. Cái này test thử thấy cũng ổn ổn.
  • 0

#6 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 03 October 2008 - 03:49 PM

Tôi đọc help thấy như sau:
Posted Image
bạn xem rồi dùng líp xem sao

Cám ơn bác nhưng hàm này h́nh như là tính khoảng cách từ 1 điểm đến 1 mặt phẳng (tạo bởi 3 điểm). Tức hướng vectơ là hướng vuông góc với mặt phẳng tạo bởi 3 điểm, c̣n bài toán pick chuột th́ hướng vectơ là hướng trục Z. Bài toán này là t́m giao điểm của đường thẳng song song trục Z với mặt phẳng tạo bởi 3 điểm hay nói cách khác nó là bài toán nội suy cao độ của 1 điểm thuộc mặt phẳng ( tạo bởi 3 điểm) mà em nhớ bác Nguyen Hoanh đă từng viết 1 Lisp nội suy như thế
  • 0

#7 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 posts
Danh tiếng: 336 (khá)

Gửi vào 03 October 2008 - 04:57 PM

Cám ơn bác nhưng hàm này h́nh như là tính khoảng cách từ 1 điểm đến 1 mặt phẳng (tạo bởi 3 điểm). Tức hướng vectơ là hướng vuông góc với mặt phẳng tạo bởi 3 điểm, c̣n bài toán pick chuột th́ hướng vectơ là hướng trục Z. Bài toán này là t́m giao điểm của đường thẳng song song trục Z với mặt phẳng tạo bởi 3 điểm hay nói cách khác nó là bài toán nội suy cao độ của 1 điểm thuộc mặt phẳng ( tạo bởi 3 điểm) mà em nhớ bác Nugyen Hoanh đă từng viết 1 Lisp nội suy như thế

Vậy bạn thử hàm ilp(p1,p2,p3,p4,p5) xem sao, p1->p2 là đường thẳng p2 bạn chỉ cần cho tọa độ z tăng 1 đơn vị, p3,p4,p5 là 3 điểm của 1 plan. Hàm này sẽ cho giao điểm cái rột hà
  • 0

#8 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 03 October 2008 - 07:33 PM

Hàm ilp(p1,p2,p3,p4,p5) là như thế nào bác nhỉ. Sao em ko t́m thấy hàm này trong lisp.
  • 0

#9 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 13 February 2009 - 07:38 PM

Bác natâc đă có được lisp nọi suy cao độ giữa 3 điểm như đă nói chưa nhỉ, có thể share cho ḿnh dùng với được ko?
Thân

Xong lâu rồi. Ḿnh áp dụng nó với trường hợp tổng quát để làm 1 phần mềm có ích cho mọi người. Nếu chỉ nội suy giữa 3 điểm thôi th́ bác NguyenHoanh đă viết 1 cái lisp như thế rồi. Bạn thử t́m xem.
  • 0

#10 nataca

nataca

    biết lệnh adcenter

  • CVN Team
  • PipPipPipPipPipPipPip
  • 712 posts
Danh tiếng: 541 (tốt)

Gửi vào 14 February 2009 - 10:37 PM

Ḿnh cũng đă t́m rồi nhưung ko thấy đâu. Giờ đang rất cần nếu bác ko có ǵ ngại th́ share cho ḿnh một cái được ko?
Email: nguyentau84@yahoo.com.vn
Thanks!

Nói thật ḿnh không thích gửi riêng qua email lắm. Ḿnh post lại lisp của bác Nguyen Hoanh lên đây cho mọi người. (@ bác Nguyen Hoanh ơi không hiểu sao chức năng t́m kiếm trên diễn đàn không hiệu quả lắm. Có cái biết chắc chắn có mà tim măi không ra)
(defun c:ns	(/ ss3 pgoc lste tt)   (princ "\nChon 3 text dau tien: ")   (setq ss3 (ssget '((0 . "TEXT"))))   (if (/= (sslength ss3) 3)	  (alert (strcat "\nBan vua chon "					 (itoa (sslength ss3))					 " text\nban can phai chon 3 text"			 )	  )	  (progn		 (setq			pgoc (trans (getpoint "\nVao diem noi suy: ") 1 0)			lste (mapcar 'ssname (list ss3 ss3 ss3) '(0 1 2))			tt	 (entget (car lste))			lste (mapcar '(lambda (e)							 (setq tt (entget e)								   p  (cdr (assoc 10 tt))								   gt (atof (cdr (assoc 1 tt)))							 )							 (reverse (cons gt (cdr (reverse p))))						  )						 lste				 )		 )		 (mapcar 'set '(p0 p1 p2) lste)		 (setq tt (subst (cons 10 pgoc) (assoc 10 tt) tt)			   tt (subst (cons 1 (rtos (getz p0 p1 p2 pgoc))) (assoc 1 tt) tt)		 )		 (entmake tt)	  )   )); CHHUONG TRINH CON(defun getZ	(p0 p1 p2 p / vta vtb x0 y0 z0 x1 y1 z1 x2 y2 z2 x y A B C)   (setq	  p	  (list (car p) (cadr p))	  vta (mapcar '- p1 p0)	  vtb (mapcar '- p2 p0)   )   (mapcar 'set		   '(x0 y0 z0 x1 y1 z1 x2 y2 z2 x y)		   (append p0 vta vtb p)   )   (setq	  A	(- (* y1 z2) (* y2 z1))	  B	(- (* z1 x2) (* z2 x1))	  C	(- (* x1 y2) (* x2 y1))   )   (/ (- (+ (* A x0) (* B y0) (* C z0)) (+ (* A x) (* B y))) C))

  • 0

#11 tuvn254

tuvn254

    biết vẽ line

  • Members
  • PipPip
  • 28 posts
Danh tiếng: 2 (b́nh thường)

Gửi vào 25 March 2009 - 12:12 PM

các bác cho iem hỏi, thế giờ e muốn nội suy cao độ một điểm bất kỳ giữa 2 đường đồng mức đă biết cao độ th́ có lisp đó không vậy các bác. E mới dùng nova đang ngồi nội suy cao độ mệt quá....
  • 0

#12 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 posts
Danh tiếng: 171 (tàm tạm)

Gửi vào 25 March 2009 - 04:19 PM

các bác cho iem hỏi, thế giờ e muốn nội suy cao độ một điểm bất kỳ giữa 2 đường đồng mức đă biết cao độ th́ có lisp đó không vậy các bác. E mới dùng nova đang ngồi nội suy cao độ mệt quá....

Bác tdvn có viết Lisp dưới đây, bác xem có xài được không nhé.
http://www.cadviet.c...o...205&st=1600

(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)(defun dxf( name n)(cdr (assoc n (entget name))))(defun gocam( goc)(if (< goc 0.0) (+ 360.0 goc) goc))(defun pvi( p1 p2)(/ (* 180 (angle p1 p2)) pi))(defun ra( g)(/ (* g pi) 180))(defun deg( so)(/ (* 180 so) pi))(defun diemvuonggoc( p1 p2 p / p0)(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))(inters p1 p2 p p0 nil))(while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))(setq n1 (car n1) n2 (car n2))(while (setq p (getpoint "\nDiem"))(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))(setq h1 (atof st1) h2 (atof st2))(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))(setq p (diemvuonggoc p1 p2 p))(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2)))))(command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))(entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p))) )))

  • 0

#13 lelenlau2

lelenlau2

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 23 April 2009 - 02:53 PM

lisp nội suy cao độ của Bác Hoành có thể nội suy được cao độ text, em có một vấn đề đặt ra là bây giờ ḿnh nội suy cao độ mà ḿnh không cần kích nữa mà lisp sẽ tự động kích điểm cho ḿnh ví dụ tại tâm đường tṛn, c̣n các đường tṛn này ḿnh sẽ tạo vào bản vẽ.
các Bác xem thử có thể làm như vậy được không chứ ḿnh ngồi kích như vậy th́ vào nova14 nội suy vẫn hay hơn.
Các bác xem thử nha có cách nào mà lisp tự động nội suy cho ḿnh được không?
:cheers:
  • 0

#14 lelenlau2

lelenlau2

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 28 April 2009 - 11:17 AM

vậy có lisp nào tự động nội suy cao độ trong nova không?
nội suy tại tâm đường tṛn dó?
sau đây là phai cad của nó, chư nội suy thủ công lâu quá.
Anh Em nào giỏi th́ hăy nghiên cứu giúp tôi cái này. cám ơn nhiều.
Chứ lên diễn đàn toàn nói ǵ không a?
http://www.cadviet.c...4_2009bak_3.rar
  • 0

#15 dangngocloi

dangngocloi

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 31 December 2011 - 06:42 AM

may bac oi, sao lam nhu vay lisp phai click nhieu qua?? Vay thuat toan nay co nhanh hon gi so voi noi suy cao do tu nhien bang tay?? Sao khong tim theo huong tu duy khac cac pac nhi? :angry2:
  • 0

#16 hoahd166

hoahd166

    biết pan

  • Members
  • Pip
  • 8 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 20 December 2012 - 05:59 PM

Cho hỏi cái lisp thì sử dụng như thế nào vậy? Cảm ơn nhiều ạ
  • 0