我想在边缘的某些位置插入边缘的交点,但边缘之前可能有交点。所以我想对Edge.Start
到Edge.Finish
之间的交叉点进行排序(Point
)。
要使用parametric T
等式进行排序,函数如下所示:
/// <summary>
/// Get the value of T between startPoint and endPoint
/// </summary>
/// <param name="position">The intersection of edge</param>
/// <param name="startPoint">Start point of edge</param>
/// <param name="endPoint">End Point of edge</param>
/// <returns></returns>
public static double calculateT(Point position, Point startPoint, Point endPoint){
return (position.X - startPoint.X) / (startPoint.X - endPoint.X);
}
和MainWindow.xaml.cs
中的某些地方我得到了这个:
//there are some another intesection vertices
Node anotherPointer = new Node(); //pointer
//prev is node that points to start point of edge
//cur is node that points to end point of edge
//nodes is new node that wanted to inserted
//collection of intersection
List<Node> nodes = new List<Node>();
nodes.Add(node); //add the new intersection to the list
//grab all intersection between start point until end point
anotherPointer = prev.Next;
while (anotherPointer != cur) {
nodes.Add(anotherPointer);
anotherPointer = anotherPointer.Next;
}
//how to sort nodes?
问题是我需要三个参数来计算交叉点的T
。如何按功能nodes
排序calculateT
?
注意
这是我的节点类。
public class Node {
Point info;
Node next;
}
答案 0 :(得分:4)
你试过这个吗?
nodes.OrderBy(node => calculateT(...))
(我不确定你是如何获得calculateT
的参数的,但是你明白了这一点。
答案 1 :(得分:2)
List<T>
提供了您可以使用的Sort
方法。此重载需要Comparison<T>
委托作为参数,因此您只需要使用calculateT
方法构建此类委托。
nodes.Sort((node1, node2) => calculateT( /* parameters using Node1 */).CompareTo(calculateT( /* parameters using Node2 */);
请注意,如果您希望始终使用此方法对nodes
列表进行排序,则可能需要使用SortedList<T>
。