14: 2013-08-07 (水) 18:39:00 yoshida ソース 現: 2013-08-07 (水) 20:15:33 yoshida ソース
Line 27: Line 27:
#ref(triangle3D.png) #ref(triangle3D.png)
指令値を出すため、もう一つ三角形を作ります。D2からZ軸に沿ってposの位置まで移動した点をjとし、D2、j、posを頂点とした直角三角形を作成します。D2の指令角度はこの三角形のD2の角度から先ほど求めたD2の角度を差し引きした角度になります。~ 指令値を出すため、もう一つ三角形を作ります。D2からZ軸に沿ってposの位置まで移動した点をjとし、D2、j、posを頂点とした直角三角形を作成します。D2の指令角度はこの三角形のD2の角度から先ほど求めたD2の角度を差し引きした角度になります。~
 +但し、D2とD3のAX-12+は逆向きに結合しているので、位置を指定する際には注意が必要です。~
最後にD1の角度をアークタンジェントで求めれば角度計算は終了です。 最後にD1の角度をアークタンジェントで求めれば角度計算は終了です。
Line 36: Line 37:
#include <math.h> #include <math.h>
#include <fd.h> #include <fd.h>
-double pos[3] = { 80.0, 0, 50.0 };  // 座標(x, y, z) +double pos[3] = { 70.0, 70.0, 130.0 };  // 座標(x, y, z) 
-const int L[4] = { 42, 27, 68, 40 };  // 軸間の長さ+const int L[4] = { 42, 27, 83, 55 };  // 軸間の長さ
// RadianからDegreeへ変換 // RadianからDegreeへ変換
Line 46: Line 47:
uint16_t Position (double rad) { uint16_t Position (double rad) {
  return 512 + Degree(rad) * 3.41;   return 512 + Degree(rad) * 3.41;
 +}
 +uint16_t Position2 (double rad) {
 +  return 512 - Degree(rad) * 3.41;
} }
Line 70: Line 74:
  fd_DXSetPosition (1, Position(radD1));   fd_DXSetPosition (1, Position(radD1));
  fd_DXSetPosition (2, Position(radD2));   fd_DXSetPosition (2, Position(radD2));
-  fd_DXSetPosition (3, Position(radD3));+  fd_DXSetPosition (3, Position2(radD3));
} }
</pre> </pre>


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom