Đến nội dung


Hình ảnh
- - - - -

Vẽ đồ thị hàm số theo phương trình


  • Please log in to reply
25 replies to this topic

#1 dangtosy

dangtosy

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 February 2009 - 02:07 PM

Có cao thủ nào giúp em với, đang cần gấp
Vẽ biên dạng của đường sau:

x=-e.cos(phi)+r.cos(e.phi/r)
y=-e.sin(phi)+r.sin(e.phi/r)

Các tham số e và r do người dùng nhập vào.
Góc (phi) chạy từ 0 đến 360 độ, ứng với mỗi giá trị của góc (phi) ta có được x và y.
Giả sử ta chia 360 độ ra làm 1000 phần thì mỗi phần là 0,36 độ. Ta cho i chạy từ 0 đến 999, tính được x và y tại điểm đó, nối các điểm đó lại được đường biên dạng.

Ý tưởng của em là như vậy, mong các cao thủ giúp đỡ.
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 21 February 2009 - 04:53 PM

Lisp VDT dưới đây vẽ đồ thị hàm số bất kỳ (trường hợp của bạn là một trường hợp cụ thể của lệnh này).
đồ thị dạng:
x=g(tt)
y=f(tt)
tt chạy từ ttmin đến ttmax với bước nhảy là ttstep


(defun c:vdt (/ startvdt pcu)
(vl-load-com)
(if (not cal)
(arxload "geomcal")
)
(setq
vdtdcl (vl-filename-mktemp "vdt.dcl")
fdcl (open vdtdcl "w")
)
(foreach ll dclres
(write-line ll fdcl)
)
(close fdcl)
(setq dlid (load_dialog vdtdcl)
vdtdl (new_dialog "vdt" dlid)
)
(if x
(set_tile "x" x)
)
(if y
(set_tile "y" y)
)
(if tmax
(set_tile "tmax" (rtos tmax))
)
(if tmin
(set_tile "tmin" (rtos tmin))
)
(if tstep
(set_tile "tstep" (rtos tstep))
)
(start_dialog)
(setq x (strcase x t)
y (strcase y t)
)
(if (and startvdt (/= tstep 0.0))
(progn
(if (> tmin tmax)
(setq tt tmin
tmin tmax
tmax tt
)
)
(setq tstep (abs tstep))
(setq tht tmin)
(while (< tht tmax)
(setq xe x
ye y
tt tht
xht (c:cal xe)
yht (c:cal ye)
tht (+ tht tstep)
pht (list xht yht)
)
(if pcu
(entmake (list (cons 0 "LINE") (cons 10 pcu) (cons 11 pht)))
)
(setq pcu pht)

)
)
)
(vl-file-delete vdtdcl)
(princ)
)
(setq dclres (list
"vdt: dialog {"
" label = \"Ve do thi ham so\";"
" :text {"
" label = \"VDT © Nguyen Hoanh - cadviet.com\";"
" }"
" :edit_box{"
" label=\"X: \";"
" key = \"x\";"
" action = \"(setq x $value)\";"
" }"
" :edit_box{"
" label=\"Y: \";"
" key = \"y\";"
" action = \"(setq y $value)\";"
" }"
" :boxed_column{"
" label = \"Tham so tt\";"
" :edit_box{"
" label = \"TT min: \";"
" key = \"tmin\";"
" action = \"(setq tmin (c:cal $value))\";"
" }"
" :edit_box{"
" label = \"TT max: \";"
" key = \"tmax\";"
" action = \"(setq tmax (c:cal $value))\";"
" } "
" :edit_box{"
" label = \"TT step: \";"
" key = \"tstep\";"
" action = \"(setq tstep (c:cal $value))\";"
" }"
" } "
" :row{"
" :button{"
" label = \"Bat dau ve\";"
" key = \"start\"; "
" is_default = true;"
" action = \"(setq startvdt t)(done_dialog)\";"
" }"
" :button{"
" label = \"Ket thuc\";"
" key = \"end\"; "
" is_cancel=true;"
" action = \"(done_dialog)\";"
" } "
" }"
"}"
)
)
(princ)


Trong ví dụ của bạn, bạn nhập thông số như sau:
Hình đã gửi

Kết quả tại CAD:
Hình đã gửi

Nếu bạn muốn vẽ đồ thị dạng y=f(x) chỉ đơn giản bạn cho x bằng tt, còn y=f(tt). Ví dụ:
bạn muốn vẽ đồ thị hàm y=sin(x)*10, bạn nhập vào:
Hình đã gửi

Bạn muốn vẽ đồ thị hàm số y=x*x, bạn nhập vào:
Hình đã gửi

Bạn muốn vẽ đồ thị hàm số x=y*y, bạn nhập vào:
Hình đã gửi

Lưu ý trong biểu thức nhập vào của lệnh VDT:
- đơn vị góc là độ (không phải radian).
- Bạn có thể nhập công thức hay số tùy bạn.
- bạn có thể sử dụng tất cả các hàm số thông dụng như +,-,*,/,sqrt, sin, cos, tan,...
  • 0

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 February 2009 - 07:41 AM

Tuyệt lắm anh Hoành! Ssg có vài đề nghị:

1. Kết quả vẽ là pline hoặc spline có lẽ hợp ý user hơn. Anh có thể bổ sung options: Line/Pline/Spline/Points tuỳ ý user (đưa luôn vào dialog là đẹp nhất).

2. Anh có thể gộp chung với lisp vẽ đồ thị hàm số từ file thành một chương trình vẽ đồ thị hoàn thiện, với các options đầu vào:
- Nhập biểu thức trực tiếp (như lisp hiện tại)
- Nhập số liệu từ file data. Gồm các định dạng: txt, csv, xls, mdb

3. Thêm Button Help trong dialog (dùng file *.chm)
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 23 February 2009 - 08:21 AM

Tuyệt lắm anh Hoành! Ssg có vài đề nghị:

1. Kết quả vẽ là pline hoặc spline có lẽ hợp ý user hơn. Anh có thể bổ sung options: Line/Pline/Spline/Points tuỳ ý user (đưa luôn vào dialog là đẹp nhất).

2. Anh có thể gộp chung với lisp vẽ đồ thị hàm số từ file thành một chương trình vẽ đồ thị hoàn thiện, với các options đầu vào:
- Nhập biểu thức trực tiếp (như lisp hiện tại)
- Nhập số liệu từ file data. Gồm các định dạng: txt, csv, xls, mdb

3. Thêm Button Help trong dialog (dùng file *.chm)

Cảm ơn bác Ssg đã động viên, em khá hứng thú với chương trình này.

3 đề nghị của bác rất hợp lý, em sẽ làm ngay. Riêng một phần của đề nghị thứ 2, nhập dữ liệu từ file xls và mdb có lẽ phải nhờ các bác hỗ trợ thêm.
  • 0

#5 dangtosy

dangtosy

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 February 2009 - 08:25 AM

Cảm ơn bác Hoành rất nhiều. Em sẽ ứng dụng nó vào bài toán cụ thể như vẽ biên dạng bánh răng Cycloid, hay biên dạng bơm root, đây là những bài toán ứng dụng thực tế trong sản xuất. Một lần nữa xin chân thành cảm ơn.
  • 0

#6 dangtosy

dangtosy

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 February 2009 - 10:27 AM

Chào bác Hoành. Với chương trình của bác em đã vẽ được biên dạng bánh răng Cycloid như hình, hay thật đấy.

Hình đã gửi
  • 0

#7 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 February 2009 - 03:04 PM

Cảm ơn bác Ssg đã động viên, em khá hứng thú với chương trình này.

3 đề nghị của bác rất hợp lý, em sẽ làm ngay. Riêng một phần của đề nghị thứ 2, nhập dữ liệu từ file xls và mdb có lẽ phải nhờ các bác hỗ trợ thêm.

OK! Anh tham khảo cái này và áp dụng tuỷ theo ý đồ lập trình chung:

http://www.cadviet.c...les/XLS_MDB.zip

GetXLS.lsp ssg đã áp dụng trong nhiều chương trình, rất tốt.
GetMDB.lsp chưa được thử nghiệm nhiều nhưng có vẻ cũng khá tin cậy, chưa phát hiện ra điều gì bất ổn.
  • 1

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 February 2009 - 03:12 PM

Cảm ơn bác Hoành rất nhiều. Em sẽ ứng dụng nó vào bài toán cụ thể như vẽ biên dạng bánh răng Cycloid, hay biên dạng bơm root, đây là những bài toán ứng dụng thực tế trong sản xuất. Một lần nữa xin chân thành cảm ơn.

Bạn quan tâm đến bánh răng Cycloid có thể tham khảo thêm ở topic này:

http://www.cadviet.c...?showtopic=3884
  • 0

#9 cuong_gtvt

cuong_gtvt

    biết zoom

  • Members
  • Pip
  • 18 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 01 April 2009 - 04:08 PM

OK! Anh tham khảo cái này và áp dụng tuỷ theo ý đồ lập trình chung:

http://www.cadviet.c...les/XLS_MDB.zip

GetXLS.lsp ssg đã áp dụng trong nhiều chương trình, rất tốt.
GetMDB.lsp chưa được thử nghiệm nhiều nhưng có vẻ cũng khá tin cậy, chưa phát hiện ra điều gì bất ổn.

Các bác cho em hỏi một chút. Em muốn đường cong trên là một đường cong liên tục chứ không phải là các điểm thì làm thế nào?
Em đã thay đoạn:
(if pcu
(entmake (list (cons 0 "LINE") (cons 10 pcu) (cons 11 pht)))
bằng đoạn:
(if pcu
(entmake (list (cons 0 "SPLINE") (cons 10 pcu) (cons 11 pht)))
nhưng nó lại không chạy. Giúp em với
  • 0

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 08 April 2009 - 09:18 PM

Các bác cho em hỏi một chút. Em muốn đường cong trên là một đường cong liên tục chứ không phải là các điểm thì làm thế nào?
Em đã thay đoạn:
(if pcu
(entmake (list (cons 0 "LINE") (cons 10 pcu) (cons 11 pht)))
bằng đoạn:
(if pcu
(entmake (list (cons 0 "SPLINE") (cons 10 pcu) (cons 11 pht)))
nhưng nó lại không chạy. Giúp em với

Chào bạn Cuong_gtvt,
Nó không chạy là đúng rồi bạn ạ. Bạn nhớ rằng hàm entmake chỉ tạo được các đối tượng khi các mả dxf trong hàm tương ứng với các mã của đối tượng được lấy bởi hàm entget.
Trong trường hợp của bạn, bạn muốn tạo đối tượng spline thì các mã dxf của nó khác xa với các mã của line bạn ạ. Bạn hãy tìm hiểu kỹ hơn về các mã dxf của spline bạn nhé. Nó rắc rối đổi kẹo lắm chứ chả đơn giản như thằng line đâu.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 tuanprince

tuanprince

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 07 May 2009 - 07:53 AM

Cái VDT này kô hiểu được hàm tan nhưng xài rất tôt; thay hàm tan bằng biểu thức sin/cos vẫn chạy được. Tuy nhiên nhập biểu thức phức tạp vô thì vẽ kô dược :(
  • 0

#12 do tien hung arsenal

do tien hung arsenal

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 14 January 2010 - 08:50 PM

em đã appload cái code này vào cad rồi
đã sử dụng lệnh vdt rồi
đã điền đầy đủ thông tin trong cái box rồi
sau đó klick vào cai "bat dau ve" nhưng chẳng thấy hiện lên cái gì
sao vậy các anh!
  • 0

#13 kegiaumat

kegiaumat

    biết vẽ circle

  • Members
  • PipPip
  • 39 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 04 September 2010 - 07:55 PM

tuyệt quá bác hoành ơi em đang kiếm cái này mãi mà kô thấy. em là dân cầu đường mà đang dịnh kiếm cái vẽ nên đường cong chuyển tiếp (dạng clotoit) cái này bọn nova và lank civil đều có cả nhưng đôi khi mình không muốn cài các chương trình đó. à ai còn nhớ phương trình đường cong clotoit kô nhỉ post lên em xem cái
  • 0

#14 ly phuoc

ly phuoc

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 26 November 2010 - 04:03 PM

Các bạn ơi !!!!!!!! mình mới tham gia diển đàn, các bạn chỉ giúp mình cách hướng dẩn sử dụng FASTCAD và các lisp được không??? cảm ơn các bạn nhiều :leluoi: :cheers:
  • 0

#15 dokisi

dokisi

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 07 March 2011 - 07:58 AM

anh ơi up lại lisp VDT cho em với.link không download được nữa
  • 0

#16 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 641 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 03 June 2012 - 10:36 AM

em đã appload cái code này vào cad rồi
đã sử dụng lệnh vdt rồi
đã điền đầy đủ thông tin trong cái box rồi
sau đó klick vào cai "bat dau ve" nhưng chẳng thấy hiện lên cái gì
sao vậy các anh!

xem tại gốc tọa độ (0 0 0) đi bạn, chú ý là khi mà thực hiện lệnh gì đó mà không thấy cad có "biểu hiện" gì, và cũng không báo lỗi thì nên thực hiện trên một file cad mới "trắng" chưa vẽ gì cà thực hiện xong lệnh nhấn CTRL +A để thấy nó đã làm gì, sau đó thì zoom đến nơi mà cad đánh dấu,
  • 0

#17 quoctien.tedi

quoctien.tedi

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 November 2012 - 10:40 PM

Chao cac ban. Mình đang rất cần ứng dụng vẽ đường cong bậc 2 trên cad. rất mong diễn đàn và mọi người chi giup. nếu có thể bạn bổ sung cho mình 2 trục tọa độ đi cùng được ko? Cảm ơn Bạn rất nhiều.
  • 0

#18 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 November 2012 - 10:51 PM

Hồi nãy giờ từ topic này nhảy qua topic khác thì bạn đã vẽ xong 100 trục tọa độ rồi. Có cần thiết lắm không nhỉ? Mà nếu cần thì chí ít cũng cho biến bọn chúng dài ngắn bao nhiêu, có mang đầu đạn hạt nhân to nhỏ chứ?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#19 quoctien.tedi

quoctien.tedi

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 November 2012 - 11:49 PM

chào Bạn
Minh co thay trong hinh ảnh minh họa của ban co truc tọa độ va đường rất đẹp. Nên mình muốn bạn cho mình lisp để vẽ được như vậy nhé. Mình cảm ơn bạn nhiều lắm.
  • 0

#20 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 November 2012 - 06:26 AM

Hình minh họa thì mình chỉ minh họa cho trường hợp "đẹp" nhất nên mình vẽ thêm XOY.
Thực tế: khi vẽ đồ thị, tùy theo hàm và tùy theo khoảng [xmin-xmax] mà rất có thể cái XOY nó nằm cách cái đồ thị hàng ngàn cây số. Vậy thì vẽ ra để làm gì?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.