Chuyển đến nội dung
Diễn đàn CADViet
Chym Code

Nhờ Các Bác Nghiên Cứu Và Viết Giúp Em Cái Lisp Này Với !

Các bài được khuyến nghị

em muốn vẽ đường tròn R bằng cách sau:

1. chọn đối tượng ( đường chuẩn màu đỏ, chiều dài L)

2. khoảng cách bước P 

   - số lượng đường tròn : n ( n : là số nguyên )

   - n thỏa mãn , n>= L/P ( giả sử L/P = 3.84542  thì n = 4)

3. khoảng cách từ tâm đường tròn R đến đường chuẩn L ( màu đỏ) là : C

4. khoảng cách START POINT và END POINT lần lượt là A và B

 

....

các bác cố gắng nghiên cứu và giúp em với nhé !

Em cảm ơn trước !

đây là hình vẽ cụ thể

 

http://www.cadviet.com/upfiles/6/151325_dim_lo.dwg

 

http://www.cadviet.com/upfiles/6/151325_dim_lo.pdf

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Bạn sửa lại tiêu đề cho đúng nội quy diễn đàn kẻo bị xóa đó :D

2. Về lisp bạn yêu cầu, mình viết đại với quy ước:

- Đường chuẩn là Line

- Đi từ điểm đầu đến điểm cuối của line thì đường tròn được vẽ ra phía trái của line khi c>0 (và ngược lại)

- Khi số dư của phép chia L/P = 0 lấy n = L/P

...

>>> Mần tới như sau:

:D :D :D

(defun c:VE( / line p c R info sta end ang len du n cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getreal "\nNhap P: ")
	  c (getreal "\nNhap C: ")
	  R (getreal "\nNhap R: ")
	  )
(if (and line p c R)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  )
		(cond
			((> (setq du (rem len p)) 0)
				(setq n (1+ (fix (/ len p))))
				(setq cen (polar (polar sta ang (/ du 2)) (+ ang (/ pi 2)) c))
				)
			(t 
				(setq n (/ len p))
				(setq cen (polar (polar sta ang (/ p 2)) (+ ang (/ pi 2)) c))
				)
		)	  ;cond
		(setq lst_cen (list cen))
		(repeat (1- n)
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

1. Bạn sửa lại tiêu đề cho đúng nội quy diễn đàn kẻo bị xóa đó :D

2. Về lisp bạn yêu cầu, mình viết đại với quy ước:

- Đường chuẩn là Line

- Đi từ điểm đầu đến điểm cuối của line thì đường tròn được vẽ ra phía trái của line khi c>0 (và ngược lại)

- Khi số dư của phép chia L/P = 0 lấy n = L/P

...

>>> Mần tới như sau:

:D :D :D

(defun c:VE( / line p c R info sta end ang len du n cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getreal "\nNhap P: ")
	  c (getreal "\nNhap C: ")
	  R (getreal "\nNhap R: ")
	  )
(if (and line p c R)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  )
		(cond
			((> (setq du (rem len p)) 0)
				(setq n (1+ (fix (/ len p))))
				(setq cen (polar (polar sta ang (/ du 2)) (+ ang (/ pi 2)) c))
				)
			(t 
				(setq n (/ len p))
				(setq cen (polar (polar sta ang (/ p 2)) (+ ang (/ pi 2)) c))
				)
		)	  ;cond
		(setq lst_cen (list cen))
		(repeat (1- n)
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;================================

e cảm ơn bác nhiều, nhưng bác có thể sửa giúp em chút nữa đưoc không?

 1. Em muốn nhập 2 thông số A, B nữa

 2. vì A, B em muốn là số nguyên, bước P = L/n ( không cần nguyên)

 3. Lisp của bác là P (cố định khi chọn), dư bao nhiêu đẩy vào 2 tham số A,B. Nhưng bây giờ em muốn A,B ( cố định khi chọn), P sẽ dư

 

Bác thêm giúp em cái đó với nữa nha!

0984019385, đây là số đt của em, em ở Bình Dương, khi nào có dịp bác đi ghé qua thì alo cho em, em mời bác chầu cf 

Chỉnh sửa theo Chym Code
  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nghĩa là các đường tròn ko nằm đối xứng qua đường trung trực của line ?

Đã thế thì chỉ cần nhập A hoặc B là đủ (Vì A+n*p+B = L)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nghĩa là các đường tròn ko nằm đối xứng qua đường trung trực của line ?

Đã thế thì chỉ cần nhập A hoặc B là đủ (Vì A+n*p+B = L)

giả sử bây giờ em chọn A,B ;

 n (nguyên) >= L/p, khi đó p = (L-A-B)/n. em gọi L1 = L-A-B.

Bước P ở đây được xác định bằng cách sau :  (divide) L1 thành n phần.

Nếu A=B thì các đường tròn vẫn nằm đối xứng qua trung trực của line, nếu A#B thì không phải bác ạ !

Chỉnh sửa theo Chym Code

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thôi thì thử cái này, mình làm đại vậy :D

 

- Nếu n là số đường tròn thì p=(L1/(n-1)) đó bạn ^^

(defun c:VE( / line n c R A B info sta end ang len cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  n (getint "\nNhap so duong tron n: ")
	  c (getdist "\nNhap khoang cach C: ")
	  R (getdist "\nNhap ban kinh R: ")
	  A (getdist "\nNhap A: ")
	  B (getdist "\nNhap B: ")
	  )
(if (and line n c R A B)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  p (/ (- len A B) (1- n))
			  cen (polar (polar sta ang A) (+ ang (/ pi 2)) c)
			  lst_cen (list cen)
		)
		(repeat (1- n)
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Vậy tại sao bạn ko cho đề bài là nhập vào n mà phải nhập P rồi lại tính ra P ???

em sơ lược lại, bác xem lại giúp em chút nữa nhé :

1- chọn đối tượng ( chọn line chuẩn)

2- chọn P ( cái P này sau này không dùng để vẽ, mà chỉ phục vụ mục đích là tính ra được n )

3-nhập C

4-nhập R

5-nhập A, B

................

................

kết quả : vẽ ra được n+1 đường tròn có bước P1 = (L-A-B)/n

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Uh, thì nhập p, vẽ ra n đường tròn

Lần này thì cấm có sai :D . Sai là bạn sai chứ mình ko sai nhá :D :D :D

(defun c:VE( / line p n c R A B info sta end ang len cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getdist "\nNhap khoang cach p: ")
	  c (getdist "\nNhap khoang cach C: ")
	  R (getdist "\nNhap ban kinh R: ")
	  A (getdist "\nNhap A: ")
	  B (getdist "\nNhap B: ")
	  )
(if (and line p c R A B)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  n (if (equal (rem len p) 0 1e-9) (fix (/ len p)) (1+ (fix (/ len p))))
			  p (/ (- len A B) (1- n))
			  cen (polar (polar sta ang A) (+ ang (/ pi 2)) c)
			  lst_cen (list cen)
		)
		(repeat (1- n)
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================
  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Uh, thì nhập p, vẽ ra n đường tròn

Lần này thì cấm có sai :D . Sai là bạn sai chứ mình ko sai nhá :D :D :D

(defun c:VE( / line p n c R A B info sta end ang len cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getdist "\nNhap khoang cach p: ")
	  c (getdist "\nNhap khoang cach C: ")
	  R (getdist "\nNhap ban kinh R: ")
	  A (getdist "\nNhap A: ")
	  B (getdist "\nNhap B: ")
	  )
(if (and line p c R A B)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  n (if (equal (rem len p) 0 1e-9) (fix (/ len p)) (1+ (fix (/ len p))))
			  p (/ (- len A B) (1- n))
			  cen (polar (polar sta ang A) (+ ang (/ pi 2)) c)
			  lst_cen (list cen)
		)
		(repeat (1- n)
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================

không thể nói lên lời, quá tuyệt bác ạ. Lúc trưa em nghĩ chỉ cần trộn 2 cái lisp hồi sáng của bác lại là thành bài toán em mong muốn, nhưng khổ nỗi em ko biết code lisp nên em ko dám mò.@@. Lần này thì không có gì để nói nữa rồi. Cảm ơn bác nhiều, bác có FB hay số đt không, cho em xin với nhé.

Lisp vừa đúng ý em luôn bác ah !, e hiện tại đang vui quá mức cho phép.@@

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@ Anh Hiệp:

 

11837_aaa_1.png

 

1/ Hình mầu xanh: em vẽ 1 đường tròn rồi array với bước p= 171/5

( theo đúng yêu cầu của chủ thớt là "kết quả : vẽ ra được n+1 đường tròn có bước P1 = (L-A-B)/n"

P1=  (L-A-B)/n= (219-27-21)/5= 171/5= 34.20)

==>>Kết quả ra được 6 đường tròn,  đúng với "kế hoạch được giao"  :  n+1= 5+1=6

2/ Hình mầu trắng vẽ theo lisp của anh:

Command: ve
Chon line chuan:
Nhap khoang cach p: 171/5
Nhap khoang cach C: 20
Nhap ban kinh R: 10
Nhap A: 27
Nhap B: 21
Command:

==>> Kết quả ra được 7 đường tròn, "vượt mức kế hoạch kế hoạch được giao" : n+2= 5+2=7

 

Vì sao cùng nhập một giá trị bước 171/5 lại ra hai kết quả khác nhau??? Anh nhầm hay chủ thớt ra nhầm đầu bài???? :) :) :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@haanh:
Thớt nói: n>= L/p (p nhập vào) nên n được tính 219/(171/5) = 6.4035087719298245614035087719298 >>>> Chọn n =7

>>> Vẽ ra n = 7 đường tròn là đúng ycầu của thớt :D

Nói thật mình cũng chẳng hiểu thớt đang làm gì với cái này

VÀ tại sao lại không tính n>= (L-A-B)/p ? <phán theo logic> để đúng theo phản biện của haanh :D :D :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@haanh:

Thớt nói: n>= L/p (p nhập vào) nên n được tính 219/(171/5) = 6.4035087719298245614035087719298 >>>> Chọn n =7

>>> Vẽ ra n = 7 đường tròn là đúng ycầu của thớt :D

Nói thật mình cũng chẳng hiểu thớt đang làm gì với cái này

VÀ tại sao lại không tính n>= (L-A-B)/p ? <phán theo logic> để đúng theo phản biện của haanh :D :D :D

@hiepttr :

Bác có thể sửa lại cho em cái líp trên với n>= (L-A-B)/p  duoc không? Em cũng vừa đọc bài của @haanh, thấy có gì đó hoang mang quá@@. Lúc nào rảnh bác sửa lại giúp em nhé !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

:D :D :D

Đại loại là bạn đang bố trí gì gì đó, khống chế 2 đầu là A, B & bước @ <= p nhập vào

Nếu vậy thì rút kinh nghiệm lần sau yêu cầu cho rõ ràng từ đầu nhé :D

(defun c:VE( / line p n c R A B info sta end ang len L1 cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getdist "\nNhap khoang cach p: ")
	  c (getdist "\nNhap khoang cach C: ")
	  R (getdist "\nNhap ban kinh R: ")
	  A (getdist "\nNhap A: ")
	  B (getdist "\nNhap B: ")
	  )
(if (and line p c R A B)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  L1 (- len A B)
			  n (if (equal (rem L1 p) 0 1e-9) (fix (/ L1 p)) (1+ (fix (/ L1 p))))
			  p (/ L1 n)
			  cen (polar (polar sta ang A) (+ ang (/ pi 2)) c)
			  lst_cen (list cen)
		)
		(repeat n
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================
  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

:D :D :D

Đại loại là bạn đang bố trí gì gì đó, khống chế 2 đầu là A, B & bước @ <= p nhập vào

Nếu vậy thì rút kinh nghiệm lần sau yêu cầu cho rõ ràng từ đầu nhé :D

(defun c:VE( / line p n c R A B info sta end ang len L1 cen lst_cen)
(setq line (entsel "\nChon line chuan: ")
	  p (getdist "\nNhap khoang cach p: ")
	  c (getdist "\nNhap khoang cach C: ")
	  R (getdist "\nNhap ban kinh R: ")
	  A (getdist "\nNhap A: ")
	  B (getdist "\nNhap B: ")
	  )
(if (and line p c R A B)
	(progn
		(setq info (entget (car line))
			  sta (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 10)) info)))
			  end (cdr (car (vl-remove-if-not '(lambda (x) (= (car x) 11)) info)))
			  ang (angle sta end)
			  len (distance sta end)
			  L1 (- len A B)
			  n (if (equal (rem L1 p) 0 1e-9) (fix (/ L1 p)) (1+ (fix (/ L1 p))))
			  p (/ L1 n)
			  cen (polar (polar sta ang A) (+ ang (/ pi 2)) c)
			  lst_cen (list cen)
		)
		(repeat n
			(setq cen (polar cen ang p)
			  lst_cen (cons cen lst_cen))
		)
		(mapcar '(lambda (x) (MakeCircle x R nil nil "Dg_tron" nil nil)) lst_cen)
	)
	(princ "*** Dau vao chua dung ! ***")
)	 ;if
(princ)
)
;=================================
(defun MakeCircle (point R Linetype LTScale Layer Color xdata)	
(entmakex (list '(0 . "CIRCLE")									
				(cons 8 (if Layer Layer (getvar "Clayer")))								  
				(cons 6 (if Linetype Linetype "bylayer"))									
				(cons 48 (if LTScale LTScale 1))								  
				(cons 62 (if Color Color 256))									
				(cons 10 point)									
				(cons 40 R)									
				(cons -3 (if xdata (list xdata) nil))))
);end
;=================================

cảm ơn anh nha, giờ thì hoàn toàn chuẩn rồi !

em làm bác vất vả quá, hjhj

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@haanh:

Thớt nói: n>= L/p (p nhập vào) nên n được tính 219/(171/5) = 6.4035087719298245614035087719298 >>>> Chọn n =7

>>> Vẽ ra n = 7 đường tròn là đúng ycầu của thớt :D

Nói thật mình cũng chẳng hiểu thớt đang làm gì với cái này

VÀ tại sao lại không tính n>= (L-A-B)/p ? <phán theo logic> để đúng theo phản biện của haanh :D :D :D

 

Tại sao anh lại lấy số liệu 171/5 của em với giả định n=5 để tính??? :) :) :)

Như vậy là cả anh chủ thớt và anh Hiệp đều nhầm!

Chính xác là chỉ cần khống chế 2 đầu A và B, còn đoạn giữa vẽ các đường tròn cách đều nhau  với số lượng n tùy ý.

Kết luận: đây là bài toán đơn giản, không cần phải dùng lisp, mà chỉ cần dùng chức năng Parametric của AutoCAD đời cao sẽ cho kết quả nhanh hơn lisp là cái chắc!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

haanh phán như đúng rồi ý nhỉ ?! :D
dùng chức năng Parametric của AutoCAD đời cao chỉ có thể nhanh hơn khi ta dùng file mẫu & cũng có thể phải mất công tính nhẫm ra n=?

Nếu là BV mới hoàn toàn thì chưa chắc mèo nào cắn cổ mĩu nào :D :D :D Chưa nói đến là thớt có cad đời cao hay ko ?!

p/s:
a) 171/5 chỉ là cách viết khác của 34.2, có ai nói gì đến n=5?

b) Y/cầu của thớt là nhập p, ko phải nhập n

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thực ra là chủ thớt không diễn đạt được ý tưởng của mình. Lisp của anh cần phải bổ xung thêm  đường tâm lỗ mới có thể nhanh được.

 

2.4  ĐIỂN CỐ “CƯỠI NGỰA XEM HOA”
Có xuất xứ từ câu “Kị mã quan hoa”
Xưa kia, có một anh chàng họ Tiền là con một gia đình giàu có, vì thế mọi người
vẫn thường quen gọi là “Tiền công tử”. Bởi vì Tiền công tử ngay từ khi mới sinh
ra đã bị tật thọt chân (chân bị tật đi cà nhắc), cho nên đã hơn ba mươi tuổi rồi mà
vẫn chưa có ai chịu lấy anh ta làm chồng.

Mặc dù Tiền công tử vẫn thường tự an ủimình rằng “nhân vô thập toàn”, nhưng anh

ta vẫn cảm thấy vô cùng buồn bã.

 

Phía bắc thành có một nhà Viên ngoại họ Tôn có cô con gái thứ ba đã hai mươi bảy, hai
mươi tám tuổi rồi mà vẫn chưa gả chồng, lí do là bởi cô này bị tật sứt môi.

Vào một thời gian nọ, cả hai nhà họ Tiền và họ Tôn vô tình cùng tìm tới một bà họ Lý
chuyên sống bằng nghề mai mối, khẩn khoản nhờ bà ta nghĩ cho một “diệu kế”.

 

Bà mối họ Lý có ý muốn sắp xếp sao cho hai người nhìn được mặt nhau, nhưng lại lo

lắng rằng hai bên sẽ nhận ra và chê bai khuyết tật của nhau, như thế thì cuộc mai
mối của bà ta sẽ khó mà thành công được.

 

Đúng lúc đang bí thì thật là may mắn, vô tình bà ta đọc được một bài thơ của một

nhà thơ nọ có tên là “Đăng khoa hậu” (sau khi thi đậu), trong đó có hai câu

“Xuân phong đắc ý mã đề thanh, nhất mụckhán biến Trường An hoa” .

 

(sau khi thi đậu, đắc ý cưỡi ngựa dạo khắp thànhTrường An để ngắm hoa trong gió xuân).

Sau khi đọc xong câu thơ, bà Lý bèn nảy ra một mưu kế từ hai câu thơ này, lập tức quyết

định thiết kế ngay màn kịch “Cưỡi ngựa xem hoa” để tác thành cho hai người.

Trước tiên, bà Lý đến nhà họ Tiền, rồi ngay trước mặt Tiền công tử, bà hết lời ca
ngợi về mọi đức hạnh của “Tam tiểu thư” nhà họ Tôn, bà nói hay đến nỗi chàng
công tử họ Tiền nóng lòng chỉ mong ước làm sao ngay lập tức hái được bông hoa
xinh tươi là tam tiểu thư nhà họ Tôn để đưa về nhà họ Tiền.

 

Nhưng vừa nghĩ đến cái chân bị dị tật của mình thì “Tiền công tử” lại cảm thấy nản lòng. Đang lúc
chàng ngao ngán vì chưa biết làm cách nào để được toại nguyện, thì bà mối họ Lý
bèn thì thầm to nhỏ bên tai và rót mật vào tai Tiền công tử cái diệu kế “cưỡi ngựa”
để khéo léo dấu đi cái chân bị dị tật cà nhắc của mình.

 

Tiền công tử nghe xong rất hài lòng, giống như phút chốc trút được gánh nặng,

vội gọi ngay quản gia lấy một đĩnh bạc thật lớn để làm phần thưởng cho xứng đáng.

Bà mối họ Lý lại hoan hỉ đi tới nhà họ Tôn.

Bà ta lại cũng đủ lời tán dương tâng bốc về Tiền công tử với tam tiểu thư nhà họ Tôn, khiến

tam tiểu thư nhà họ Tôn cứ như nở hoa trong lòng, chỉ ước ao ngay lập tức được

Tiền công tử đưa xe hoa tới rước mình về.

 

Nhưng bất chợt nhớ tới cái môi bị sứt của mình, thì Tôn tiểu thư lại ngậm ngùi buồn bã.

Bà mối họ Lý nhân đó lại vờ vịt suy nghĩ ra vẻ căng thẳng lắm, cuối cùng lại hiến cho
Tôn tiểu thư một diệu kế là “ngắm hoa” để khéo léo giấu đi cặp môi sứt không
mấy đẹp đẽ. Tam tiểu thư nhà họ Tôn nghe xong  “diệu kế”, bèn gỡ ngay chiếc
trâm bằng vàng đang cài trên đầu xuống để tạ ơn.

 

Vào ngày hai bên gặp mặt nhau, Tiền công tử vừa hiên ngang vừa tự tin cưỡi trên
lưng ngựa, phong độ khôi ngô tuấn tú, hùng dũng đi qua trước cửa nhà họ Tôn,
trong lòng vui như hoa nở. Còn tam tiểu thư nhà họ Tôn thì dáng vẻ đầy thẹn
thùng e ấp đứng trước cửa nhà mình, một tay vịn cửa, tay kia cầm một bông hoa
đưa lên mũi vừa ngửi vừa ngắm nghía một cách đầy duyên dáng.

 

Do hai bên đều rất khéo léo, cho nên không ai phát hiện ra bên kia bị dị tật cả,

vì thế cả hai người đều cảm thấy rất mãn nguyện. Thế là chỉ cần qua vài ba lần đi

lại mai mối, hai bên đã nhanh chóng đi tới quyết định ngày đưa lễ ăn hỏi và chọn

ngày lành tháng tốt để
rước dâu.

Đêm động phòng, khi cả hai bên cùng phát hiện ra dị tật của nhau thì đã muộn, cả
hai người đều vỡ mộng và đành phải chấp nhận rồi tự an ủi đó là do số phận.

 

P/s: Phải công nhận là anh chủ thớt đẹp trai thật! :) :) :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×