วันพุธที่ 2 มกราคม พ.ศ. 2556

การ Sort จุดพิกัด ของ วัตถุ ในCAD ด้วย C#

จุดพิกัดของ วัตถุใน CAD มักจะเป็น จุดที่ประกอบด้วย Array ของ double (เลขทศนิยม) จำนวน 3 ตัว ที่จะทดแทนด้วย X,Y,Z เช่น
Point3d pt = new Point(10,20,0);
หมายถึง จุดพิกัด ที่มี ค่า X= 10 ค่า Y = 20 และค่า Z=0 เป็นต้น
แต่การใช้งานในหลาย กรณีเราอาจจะมีจุดเป็น ร้อยเป็นพัน การ ทำการ Sort ตามค่าเช่น ค่า X หรือ ค่า Y ก็จะเป็นเรื่องยุ่งยากพอสมควร ในกรณีนี้ ผมจะแนะนำการใช้ List /HashSetใน C# ซึ่งน่าจะง่ายกว่าวิธีการอื่นๆ

จาก Code
pts เป็น Array ของ จุดที่อาจจะมีเท่าไรก็ได้ เราจะใข้ xarr มาเป็นตัว Sort สำหรับค่า X
วิธีการก็คือว่า ใน List จะมีเครื่องมือ Sort ที่ใส่ Comparator ได้เอง


List<Point3d> xarr = new List<Point3d>();
//Dictionary<double, double> xarr = new Dictionary<double, double>();
for (int i = 0; i < pts.Count; i++)
{
xarr.Add(pts[i]);
}
Comparison<Point3d> cmpPt3 = delegate(Point3d p1, Point3d p2)
{ return (p1.X.CompareTo(p2.X)); };
xarr.Sort(cmpPt3);

เราก็จะสร้าง cmpPt3 เป็น comparator โดยที่จะเป็น delegate Function (function ที่เกิดเฉพาะงาน)
ด้วยวิธีการนี้ก็จะสามารถ Sort จุดพิกัดตามค่า X ได้อย่างไม่ยาก

นอกจากการใช้ List สามารถใช้
HashSet จะคล้าย กับ List แต่จะหา IntersectWith,UnionWith กับอีก HashSet ได้ และตัดตัวซ้ำให้