gpt4 book ai didi

c# - 在 C# 中选择一系列线段

转载 作者:行者123 更新时间:2023-11-30 17:40:14 25 4
gpt4 key购买 nike

我正在尝试为我正在开发的自制计算机辅助加工软件应用程序创建一个非常简单的功能。基本上,我画出了一些刀具路径,可以告诉铣床去哪里行驶。所以,想象一下我有 3 组线段,每组有 100 个单独的线段,每个都包含在自己的列表中,如下所示:

List<PointF> points = new List<PointF>();
List<PointF> pointsOffsetHigh = new List<PointF>();
List<PointF> pointsOffsetLow = new List<PointF>();

假设它们在屏幕上相互交叉,我希望当我单击其中的任何线段时,每个对象都被视为自己的对象。我将如何处理?我已经可以使用 StackOverflow 中的这个优秀示例来选择单独的线段:Graphic - DrawLine - draw line and move it

一旦我选择了一系列线段,我将查看它与另一系列线段相交的位置,然后删除其中的一半。这对任何 CAD 程序来说都是非常基础的东西,但在屏幕上看起来如此简单的东西背后却有如此复杂的东西。

如果有人能提供帮助,我将不胜感激。代码,通用方法,我会采取任何措施。

最佳答案

这将是一项认真的开发工作,因此在重新发明一切之前,您一定要检查是否有任何开源或第 3 方库可以满足您的需求。但是,如果您确实要从头开始推出自己的解决方案,我建议您使用 LineSegment类作为你的基础(原子对象),而不是 List<PointF> .此建议中的基本成员字段 LineSegment类将是 px , py , qx , 和 qy , 表示线段两端点的坐标。

您在上面发布的“可移动”线段图形解决方案自然适用于此对象。还可以在任意两个 LineSegment 之间进行交集测试可以使用此处概述的逻辑来完成对象:http://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/

如果您想创建一系列连接的线段,您可以将这些单独的 LineSegment对象变成 List<LineSegment> (或者将 public LineSegment Next; 成员引用添加到类中,以将任意两个对象以链表方式连接在一起)。我意识到会有一些冗余,因为每个段的第二个点将与下一个段的第一个点相同(如果这些段确实在空间上连接),但我可以根据经验说这种原子结构会更容易从长远来看,与简单的点相比,尤其是在拼接线、剪断小节、将它们传递给辅助函数等时。

LineSegment类也可以自然地扩展以支持更多的特定于线的属性,如标签、线颜色、线宽等,这些属性不能自然地分配给点列表。即使是 CAD 程序中的曲线通常也是直线的延伸(请参阅如何从线段生成 Bézier curves)。

希望这对您有所帮助。

关于c# - 在 C# 中选择一系列线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com