C# 获取圆弧-G代码转换的中心点

C# 获取圆弧-G代码转换的中心点,c#,g-code,C#,G Code,赫罗 这是我第一次在这里发帖 我是C#的新手,但我有点困难 在插图中你会发现 弧坐标 从(0,0)引用的所有点 X轴是水平的 Z轴是垂直的 输入变量: Xo,Zo =(529.819,343.509) Xn,Zn =(529.26,343.678) R(Radius) =(9.2) 我需要I,K的坐标(中心点,参考0,0) I,K的答案是(I532.2,K352.396) 但我想知道如何计算这个 这将用于G代码转换 例如: 到 (C0&C1是CW&CCW)我多年前写的一些VB6代码的拷贝/粘

赫罗

这是我第一次在这里发帖 我是C#的新手,但我有点困难

在插图中你会发现 弧坐标 从(0,0)引用的所有点 X轴是水平的 Z轴是垂直的

输入变量:

Xo,Zo =(529.819,343.509)
Xn,Zn =(529.26,343.678)
R(Radius) =(9.2)
我需要I,K的坐标(中心点,参考0,0)

I,K的答案是(I532.2,K352.396) 但我想知道如何计算这个

这将用于G代码转换 例如:


(C0&C1是CW&CCW)

我多年前写的一些VB6代码的拷贝/粘贴,它每天在许多机器上运行。它的工作原理是通过两点之间的角度旋转坐标系,从而大大简化了数学。Tangent()返回角度,Rotate()旋转点,Sqr()是C#中的Math.Sqrt():

”---从半径计算弧中心
迪姆唐#,w#
tang=co1.切线(co2)
二氧化碳。旋转二氧化碳-1
center.X=(co1.X+co2.X)/2
中心Y=0
w=中心点X-co1.X
如果Abs(mModal.RWord)0.00
呃,举起911,“R字太小”
如果结束
其他的
center.Y=-Sqr(mModal.RWord*mModal.RWord-w*w
如果结束
“---从4个可能的弧中选择
如果不是cw,则center.Y=-center.Y
如果mModal.RWord<0,则center.Y=-center.Y
center.Y=center.Y+co1.Y
居中。旋转co1,柄脚
二氧化碳。旋转二氧化碳1,唐
GetArcCenter=center

这更像是一个几何问题。
N8(3)X529.819Z343.509$
N9(4)X529.26Z343.678R9.2C0$
N8(3)X529.819Z343.509$
N9(4)X529.26Z343.678I532.2K352.396$
  '--- Compute arc center from radius
  Dim tang#, w#
  tang = co1.Tangent(co2)
  co2.Rotate co1, -tang
  center.X = (co1.X + co2.X) / 2
  center.Y = 0
  w = center.X - co1.X
  If Abs(mModal.RWord) < w Then
    '--- R-word too small
    If mModal.ThrowErr And w - Abs(mModal.RWord) > 0.00
      Err.Raise 911, , "R-word too small"
    End If
  Else
    center.Y = -Sqr(mModal.RWord * mModal.RWord - w * w
  End If
  '--- Choose out of the 4 possible arcs
  If Not cw Then center.Y = -center.Y
  If mModal.RWord < 0 Then center.Y = -center.Y
  center.Y = center.Y + co1.Y
  center.Rotate co1, tang
  co2.Rotate co1, tang
  GetArcCenter = center