CAM機能を持たせたNCシミュレータの開発に関してのメモ
CADのデータ(dxf形式)の円弧情報をNC言語のデータに変換するために
dxfファイルの中を見てみると、
「円弧の中心座標」
「円弧の開始角」
「円弧の終了角」
「円弧の半径」
といったデータが入っていたので、NC言語の円弧補間G02、G03に変換するのは
さほど難しくなさそう。
G02、G03コードで必要なパラメータは
「円弧の終点座標」
「円弧の中心座標(又は半径)」
である。
ここでG02、G03コードの情報からJavaで円弧を描画する方法について考察。
GraphicsクラスのdrawArcメソッドの引数は
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
となっており、(x, y)は弧の左上隅の座標。
width, heightは楕円の幅と高さであるが、NCデータでは楕円弧補間はないので
width = heightが常に成立する。
startAngleが円弧の開始角で、artAngleが展開角を表している。
G02、G03の引数およびその前後のコードより、
「円弧の始点(x0, y0)」「円弧の終点(x1, y1)」「円弧の中心(I, J)」
がわかっているものと考えると、
半径Rは、R = sqrt(pow(I-x0, 2.0) + pow(J-y0, 2.0)) = hypot(I-x0, J-y0)
始点と終点の距離は、D = hypot(x1-x0, y1-y0)
展開角は、theta = acos(1 - pow(D, 2.0) / (2.0*pow(R, 2.0)))
開始角は、phi = atan2(J-y0, I-x0)
弧の左上隅の座標は、(x, y) = (I-R, J-R)
これですべてのパラメータ互換ができたことになる。はず。
CADのデータ(dxf形式)の円弧情報をNC言語のデータに変換するために
dxfファイルの中を見てみると、
「円弧の中心座標」
「円弧の開始角」
「円弧の終了角」
「円弧の半径」
といったデータが入っていたので、NC言語の円弧補間G02、G03に変換するのは
さほど難しくなさそう。
G02、G03コードで必要なパラメータは
「円弧の終点座標」
「円弧の中心座標(又は半径)」
である。
ここでG02、G03コードの情報からJavaで円弧を描画する方法について考察。
GraphicsクラスのdrawArcメソッドの引数は
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
となっており、(x, y)は弧の左上隅の座標。
width, heightは楕円の幅と高さであるが、NCデータでは楕円弧補間はないので
width = heightが常に成立する。
startAngleが円弧の開始角で、artAngleが展開角を表している。
G02、G03の引数およびその前後のコードより、
「円弧の始点(x0, y0)」「円弧の終点(x1, y1)」「円弧の中心(I, J)」
がわかっているものと考えると、
半径Rは、R = sqrt(pow(I-x0, 2.0) + pow(J-y0, 2.0)) = hypot(I-x0, J-y0)
始点と終点の距離は、D = hypot(x1-x0, y1-y0)
展開角は、theta = acos(1 - pow(D, 2.0) / (2.0*pow(R, 2.0)))
開始角は、phi = atan2(J-y0, I-x0)
弧の左上隅の座標は、(x, y) = (I-R, J-R)
これですべてのパラメータ互換ができたことになる。はず。