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

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

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

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 đỡ.

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

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 (	(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:

vdt_thongso.png

 

Kết quả tại CAD:

vdt_ketqua.png

 

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:

vdt_dothisin.png

 

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

vdt_dothibinhphuong.png

 

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

vdt_canbac2.png

 

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,...

  • Like 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

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)

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
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.

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

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.

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
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.com/upfiles/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.

  • 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
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.com/forum/index.php?showtopic=3884

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
OK! Anh tham khảo cái này và áp dụng tuỷ theo ý đồ lập trình chung:

 

http://www.cadviet.com/upfiles/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

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
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.

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

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 :(

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

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!

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

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

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

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:

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

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,

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

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.

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

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ứ?

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

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.

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

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ì?

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

Lâu không vào đây, pro nào cho mình hỏi: chiều dài chuỗi text mình nhập vào cho x va y tối đa là bao nhiêu không ah?

Hề hề hề,

Giá trị của x và y ở đây là các chuỗi (string) dược nhập vào trong edit box của hộp thoại.Theo quy định của Autolisp thì các chuỗi này không được vượt quá 132 ký tự 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

Thanks!

Nhưng nếu như phương trình của mình tính toán ra rất dài (dài hơn rất nhiều so với 132 ký tự) thì còn cách nào khác không nhỉ? Chắc phải đưa phương trình tính toán vào lisp thôi 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

Thanks!

Nhưng nếu như phương trình của mình tính toán ra rất dài (dài hơn rất nhiều so với 132 ký tự) thì còn cách nào khác không nhỉ? Chắc phải đưa phương trình tính toán vào lisp thôi nhỉ?

Hề hề hề,

Thì hãy tìm cách rút gọn tối ưu nó, nếu không thể rút gọn được thì có thể tạo các biến mới sao cho hợp lý và vẽ đồ thị theo các biến mới này.

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

Bác Hoanh ơi , bác post lại cách vẽ đường hình sinx với , hình bị chết rồi , e k xem đc , tks bác nhiều ... e đang cần gấp lắm

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

×