Mathcenter Forum  

Go Back   Mathcenter Forum > คณิตศาสตร์ทั่วไป > ซอฟต์แวร์คณิตศาสตร์
สมัครสมาชิก คู่มือการใช้ รายชื่อสมาชิก ปฏิทิน ข้อความวันนี้

ตั้งหัวข้อใหม่ Reply
 
เครื่องมือของหัวข้อ ค้นหาในหัวข้อนี้
  #1  
Old 19 เมษายน 2007, 21:49
TOP's Avatar
TOP TOP ไม่อยู่ในระบบ
ผู้พิทักษ์กฎขั้นสูง
 
วันที่สมัครสมาชิก: 27 มีนาคม 2001
ข้อความ: 1,003
TOP is on a distinguished road
Smile โปรแกรม asymptote

มีใครเคยใช้โปรแกรม asymptote บ้างรึเปล่าครับ เป็นโปรแกรมขนาดเล็กมาก ใช้วาดรูปประเภทเวกเตอร์ (ไม่ได้หมายถึงใช้้วาดเวกเตอร์นะครับ หมายถึงลักษณะภาพที่ได้ ซึ่งสามารถขยายขนาดให้ใหญ่มากๆได้โดยไม่แตก) ที่ให้ผลงานคุณภาพเยี่ยมยอด วิธีวาดต้องเขียนเป็นคำสั่งลงไป โดยสามารถเขียนฟังก์ชันขึ้นใช้งานเองได้ด้วย เพื่อให้การวาดรูปที่ซับซ้อนเป็นไปได้โดยง่าย ที่สำคัญนำมาใช้ร่วมกับ LaTeX ได้ด้วยครับ (ยังไม่ทดลองด้วยตนเอง)

ตัวอย่างภาพที่ได้จากโปรแกรม asymptote

Name:  asymp_3d.gif
Views: 1216
Size:  8.3 KB

และนี่คือคำสั่งที่ใช้วาดรูปด้านบน

LATEX Code:
  1. import three;
  2. import math;
  3. texpreamble("\usepackage{bm}");
  4.  
  5. size(300,0);
  6.  
  7. pen thickp=linewidth(0.5mm);
  8. real radius=0.8, lambda=37, aux=60;
  9.  
  10. currentprojection=perspective(4,1,2);
  11.  
  12. // Planes
  13. pen bg=gray(0.9);
  14. filldraw((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle3,bg,bg);
  15. filldraw((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle3,bg,bg);
  16. filldraw((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle3,bg,bg);
  17.  
  18. real r=1.5;
  19. pen p=rgb(0,0.7,0);
  20. draw(Label("$x$",1),O--r*X,p,Arrow);
  21. draw(Label("$y$",1),O--r*Y,p,Arrow);
  22. draw(Label("$z$",1),O--r*Z,p,Arrow);
  23. label("$\rm O$", (0,0,0),W);
  24.  
  25. // Point Q
  26. triple pQ=radius*dir(lambda,aux);
  27. draw(O--radius*dir(90,aux),dashed);
  28. label("$\rm Q$",pQ,N+3*W);
  29. draw("$\lambda$",arc(O,0.15pQ,0.15*Z),N+0.3E);
  30.  
  31. // Particle
  32. triple m=pQ-(0.26,-0.4,0.28);
  33. real width=5;
  34. dot("$m$",m,SE,linewidth(width));
  35. draw("$\bm{\rho}$",(0,0,0)--m,Arrow,PenMargin(0,width));
  36. draw("$\bm{r}$",pQ--m,Arrow,PenMargin(0,width));
  37.  
  38. // Spherical octant
  39. real r=sqrt(pQ.x^2+pQ.y^2);
  40. draw(arc((0,0,pQ.z),(r,0,pQ.z),(0,r,pQ.z)),dashed);
  41. draw(arc(O,radius*Z,radius*dir(90,aux)),dashed);
  42. draw(arc(O,radius*Z,radius*X),thickp);
  43. draw(arc(O,radius*Z,radius*Y),thickp);
  44. draw(arc(O,radius*X,radius*Y),thickp);
  45.  
  46. // Moving axes
  47. triple i=dir(90+lambda,aux);
  48. triple k=unit(pQ);
  49. triple j=cross(k,i);
  50.  
  51. draw(Label("$x$",1),pQ--pQ+0.2*i,2W,red,Arrow);
  52. draw(Label("$y$",1),pQ--pQ+0.32*j,red,Arrow);
  53. draw(Label("$z$",1),pQ--pQ+0.26*k,red,Arrow);
  54.  
  55. draw("$\bm{R}$",O--pQ,Arrow);
  56. draw("$\omega\bm{K}$",arc(0.9Z,0.2,90,-120,90,160,CW),1.2N,Arrow);
ตัวอย่างแผนภาพเวนน์-ออยเลอร์ ของเซตตั้งแต่ 3 - 6 เซต

อันนี้ในตัวอย่างที่ผมไปเจอมา มีคนเขียนเป็นฟังก์ชันให้เรียกใช้งานเลยว่า ต้องการแผนภาพเวนน์สำหรับกี่เซต แล้วโปรแกรม asymptote ก็จะวาดแผนภาพนั้นออกมาให้

Name:  venn_mixed.gif
Views: 3917
Size:  7.9 KB

และนี่คือคำสั่งที่ใช้วาดรูปด้านบน

LATEX Code:
  1. // Venn diagram // Diagramme de Venn
  2. // Edwards' construction // Construction d'Edwards
  3. import roundedpath;
  4. size(10cm,0);
  5. path [] EdVenn(int n)
  6. {
  7.  path [] opath;
  8.  if (n>=1)
  9.    opath.push(shift(-1.4,-.9)*roundedpath(xscale(2.8)*yscale(.9)*unitsquare,.1));
  10.  if (n>=2)
  11.    opath.push(shift(0,-.9)*roundedpath(xscale(1.4)*yscale(1.8)*unitsquare,.1));
  12.  if (n>=3)
  13.    opath.push(scale(.5)*unitcircle);
  14.  for (int i=1; i<=n-3; ++i)
  15.    {
  16.      pair pcle=point(opath[2],1/(2^i)),
  17.        ccle=intersectionpoint(pcle--(pcle-dir(opath[2],1/(2^i))), (0,0)--(1,0));
  18.      path cle=shift(ccle)*scale(abs(pcle-ccle))*unitcircle;
  19.      real[] p1=intersect(cle, opath[2]);
  20.      path ocle=subpath(cle,-p1[0],p1[0]);
  21.      guide tpath;
  22.      real step=360/(2^i), a=0;
  23.      for (int j=0; j<2^i; ++j)
  24.        {
  25.          tpath=tpath..rotate(a)*ocle;
  26.          a+=step;
  27.        }
  28.      opath.push(tpath..cycle);      
  29.    }
  30.    return opath;
  31. }
  32.  
  33. draw(EdVenn(6));

ก็เป็นเพียงการนำโปรแกรมที่ไปเจอมาเมื่อหลายสัปดาห์ก่อนมาแนะนำให้ทราบกัน เผื่อมีใครสนใจนำมาใช้ และหากใช้เป็นแล้วจะเขียนเป็นบทความแนะนำ การเขียนคำสั่งเบื้องต้นก็จะเป็นการดีครับ
__________________
The difference between school and life?
In school, you're taught a lesson and then given a test.
In life, you're given a test that teaches you a lesson.

20 เมษายน 2007 16:06 : ข้อความนี้ถูกแก้ไขแล้ว 1 ครั้ง, ครั้งล่าสุดโดยคุณ TOP
ตอบพร้อมอ้างอิงข้อความนี้
  #2  
Old 20 เมษายน 2007, 02:27
warut warut ไม่อยู่ในระบบ
กระบี่ไร้สภาพ
 
วันที่สมัครสมาชิก: 24 พฤศจิกายน 2001
ข้อความ: 1,627
warut is on a distinguished road
Default

ไม่เคยรู้จักมาก่อนครับ แต่เชื่อแล้วว่าสุดยอดจริงๆ ขอบคุณที่แนะนำครับ

ป.ล. คุณ TOP เคยลองใช้มันวาดรูป สิ่งที่เกิดจากการตัดกันของทรงกลม 8 อัน ในโจทย์ข้อนี้รึยังครับ อยากรู้ว่าหน้าตามันเป็นไง จินตนาการไม่ออกเลยครับ
ตอบพร้อมอ้างอิงข้อความนี้
  #3  
Old 20 เมษายน 2007, 16:12
TOP's Avatar
TOP TOP ไม่อยู่ในระบบ
ผู้พิทักษ์กฎขั้นสูง
 
วันที่สมัครสมาชิก: 27 มีนาคม 2001
ข้อความ: 1,003
TOP is on a distinguished road
Default

ยังเลยครับ ผมยังใช้คำสั่งในโปรแกรมนี้ไม่เป็น คงต้องรอผมกลับจากเที่ยวภูเก็ตก่อนละครับ จะได้มีเวลาศึกษาเพิ่มเติม

อ้อ ดูผลงานเพิ่มเติมของโปรแกรม asymptote ได้ที่หน้า gallery
__________________
The difference between school and life?
In school, you're taught a lesson and then given a test.
In life, you're given a test that teaches you a lesson.
ตอบพร้อมอ้างอิงข้อความนี้
ตั้งหัวข้อใหม่ Reply



กฎการส่งข้อความ
คุณ ไม่สามารถ ตั้งหัวข้อใหม่ได้
คุณ ไม่สามารถ ตอบหัวข้อได้
คุณ ไม่สามารถ แนบไฟล์และเอกสารได้
คุณ ไม่สามารถ แก้ไขข้อความของคุณเองได้

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
ทางลัดสู่ห้อง


เวลาที่แสดงทั้งหมด เป็นเวลาที่ประเทศไทย (GMT +7) ขณะนี้เป็นเวลา 04:07


Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Modified by Jetsada Karnpracha