c# - 处理 CAD 绘图中的不精确性

标签 c# c++ algorithm drawing cad

我有一个 CAD 应用程序,允许用户绘制线条和多边形等等。

我面临的一个棘手问题是用户绘图可能非常不精确,例如,用户可能想要绘制两个相互连接的矩形。因此,应该有一条线由两个矩形共享。然而,用户很容易不画一条线,而是画两条彼此非常接近的线,彼此非常接近,以至于当从屏幕上看时,您会误认为它们是同一条线,只是当您稍微放大时它们不是。

我的应用程序会要求用户正确绘制线条(或者我的预处理必须能够进行自动校正),否则我的内部算法(我们称之为算法)将无法正确处理输入。

解决此类问题的最佳策略是什么?我正在考虑将点坐标四舍五入到一定的精度,但虽然我不能准确指出这种方法的问题,但我感觉这不是正确的做事方式,这将引入一组新的问题。

编辑:为了争论,捕捉不是一个可用的选项。就此而言,各种“输入端”指导都没有。修正必须通过对我的代码进行预处理来完成,当绘图完成时,但就在我将其提交给我的算法之前。

疯狂的限制,你说。但是用户可以在我的应用程序中构建他们的输入,或者他们可以在其他 CAD 软件中构建他们的输入,然后提交到我的引擎进行计算。我无法控制他们在其他 CAD 软件中的输入方式。

编辑 2:我可以让用户指定要发生的“簇半径”,但重要的一点是,我需要确保我的预处理算法是一致的并且不会真正引入新的集合的问题。

有什么想法吗?

最佳答案

我看到的一个问题是您的聚类/捕捉算法必须自行决定将哪个点移动到另一个点。

在实时输入捕捉过程中很简单:第一个点保持不变,第二个点捕捉到第一个点上。如果在离线模式下您得到一堆您知道应该拼接在一起的点,您不知道结果点应该位于何处。计算平均值,可能会产生一个全新的点?从所有候选点中选择最中心的点?随便挑一个?尝试将您的点与 x/y/z 轴上的其他一些点对齐?

如果您的程序完全允许任何用户交互,您可以检测可能适合合并的点簇,并向用户提供不同的合并目标点以供选择。
否则,您可以使这种行为可配置:采用合并半径(“如果两个或多个点在彼此的 n 个单位内......”)和合并算法(“......将它们合并到最中心的给定的点”)作为参数并从配置文件中读取它们。

关于c# - 处理 CAD 绘图中的不精确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4666398/

相关文章:

c# - 为什么我的所有换行符都从 "/r/n"更改为 "/n/",我该如何阻止这种情况发生?

c++ - 运行 QT Creator 时 OpenGL 的问题

c++ - 在头文件中声明对象 C++

python - 使用动态规划划分列表

c# - 如何在 Windows 服务或控制台应用程序中更改有问题的系统 IP

c# - NHibernate/LINQ : how to write this JOIN query?

c# - 在构造函数中自动调用父类(super class)方法

c++ - 在 Linux 中监控程序的内存使用情况

algorithm - 是否可以在 O(n) 步内从 Max-Heap 构建二叉搜索树?

java - 如何获取字符串的所有子序列组合(在 Java 或 C++ 等中)