多边形(或其部分)的圆形近似

时间:2014-12-02 13:13:27

标签: algorithm computational-geometry approximation g-code

我的问题的简短描述

我需要实现从G1指令到G2和G3(http://www.cnccookbook.com/CCCNCGCodeArcsG02G03.htm)的GCODE自动重构以进行3D打印。

G1是打印的直线运动(路径用矢量描述)。

我根据给定的矢量路径搜索algorytm到aproxymate circle / arc(特别是它的中点)。 请注意,G2和G3不能打印不属于圆的曲线 - 因此并非每个矢量路径都是近似的。

我的问题的长篇描述

我通过圆(弧)搜索近似部分(或全部)矢量路径(可以是正多边形,部分或不规则多边形部分)的方法。 但是,首先,让我们关注一些棱镜多边形。

在图片中我画了这个问题的不同案例。 注意: 每个多边形都是由向量构建的(如第5点所示)。 enter image description here

  1. 完整x-gon的近似值。
  2. 一边不同的部分x-gon的近似
  3. x-gon的近似值,其中两边不同但彼此相等
  4. x-gon的近似值,其中两边不同(彼此不均匀)不等于
  5. 所有边相等的部分x-gom的近似值
  6. 它不是故事的主题......有几个标准:

    • Circle的起点/终点必须位于矢量路径的开头/结尾。
    • 我需要知道圈子中点。

    我找到的解决方案(好的和坏的):

    1)和5) - 我的简单解决方案

    这是最简单的情况。我可以计算共享一个opint的每一方之间的半径。如果他们有相同的长度和每个之间的角度是相等的,我可以计算圆中点(作为属于垂直中线的点,每边一个中线),我有我需要的全部:起点,终点,中 - 点。

    但此解决方案仅适用于案例1和5。

    当我遇到2,3,4或者多边形的部分

    时,我真的不知道该怎么做

2 个答案:

答案 0 :(得分:2)

  1. 您可以获取任意2个线段的曲率半径中心

    curve radius

    1. 找到中间线
    2. 从每个(红线)投射垂直线
    3. 找到交点(它是曲率的中心)
    4. 3D 中使用对象的平面(3行不是2)。半径只是中心和线关节点之间的距离(蓝线)。如果半径太大,则将两条线作为单线处理(没有交叉点或太远的交叉点)

    5. 计算所有细分,例如#1

    6. 连接具有相同半径的弧线,如果已加入则将中心连接到单个弧

    7. 处理曲率变化

      如果弧正在改变中心或半径,请按照此图片进行操作

      elliptic arc

      第一段没有前一行,所以使用下一行而不是导致开始弧的不规则...

    8. 这应该涵盖所有情况,希望我的手绘图画有意义......

答案 1 :(得分:0)

如果您的圆弧必须在给定的端点上开始和结束,那么中心点将位于mediatrix上的某个位置,并且仍有一个自由度。

因此,您可以使用最小二乘法找到最佳拟合:假设您知道半径,它给出了中心,并计算剩余顶点到圆周的平方距离之和(到中心的距离减半径) )。最合适的是最小化该总和的那个。让我们希望有一个分析解决方案。