---
# System prepended metadata

title: 第20回目

---

# 第20回目　

参考サイト
https://daeudaeu.com/programming-sankaku/#:~:text=%E4%B8%8A%E3%81%AE%E5%9B%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E9%9D%92%E3%81%A7%E8%89%B2%E3%82%92%E3%81%A4%E3%81%91%E3%81%9F%E9%83%A8%E5%88%86%E3%81%AF%E7%9B%B4%E8%A7%92%E4%B8%89%E8%A7%92%E5%BD%A2%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%AE%E3%81%A7%E3%80%81%20%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0%E3%81%AE%E4%BE%BF%E5%88%A9%E3%81%AA%E3%81%A8%E3%81%93%E3%82%8D%20%E3%81%A7%E3%82%82%E7%B4%B9%E4%BB%8B%E3%81%97%E3%81%9F%E4%B8%8B%E8%A8%98%E3%81%AE%E8%A8%88%E7%AE%97%E5%BC%8F%E3%81%AB%E3%82%88%E3%82%8A%20x%20%E5%BA%A7%E6%A8%99%E3%81%A8%20y%20%E5%BA%A7%E6%A8%99%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%80%82%20x,r%20%2A%20cos%CE%B8%20y%20%3D%20r%20%2A%20sin%CE%B8

前回やったこと
座標を指定して移動する(cu-bricksの方まで完成)

今回の目標
進みたい距離の座標を入力して進む

## sample.jsへの実装
```
let a,b;
  let angle; 
  let cubeX;
  let cubeY;
  cube.on('id:position-id', data => {
    angle = data.angle;
    cubeX = data.x;
    cubeY = data.y;
  })

  let zx,zy,theata;

  function keypress_ivent(e){
    if(e.code === 'Enter'){
      theata = angle;
      zx = cubeX;
      zy = cubeY;

      console.log('スタート_X座標',zx);
      console.log('スタート_Y座標',zy);

      console.log('theata',theata);
      a = r.value * Math.sin(theata * (Math.PI / 180));
      b = r.value * Math.cos(theata * (Math.PI / 180));

      zx = zx + b;
      zy = zy + a;

      console.log('ゴール_ZX座標',zx);
      console.log('ゴール_ZY座標',zy);

      Convert16from10();
      cube.motorCharacteristic.characteristic.write(
      Buffer.from([0x03,  //制御の種類
                   0x02,  //制御識別値
                   0xff,  //タイムアウト時間
                   0x02,  //移動タイプ
                   0x50,  //モーターの最大速度指示値
                   0x00,  //モーターの速度変化タイプ
                   0x00,  //Reserved
                   x1, x2,  //目標地点の X 座標値
                   y1, y2,  //目標地点の Y 座標値
                   0x00, 0xA0]), //目標地点でのキューブの角度θ
                   false);
    }

  }
```
現在の座標と向いてる角度を取得し、三角関数を用いてゴールの座標の値を計算する。その後、上位8ビット下位8ビットの変換の関数（18回目参照）を読み込む。最後にゴールの座標を代入し、移動を開始する。

## Cu-bricksへの実装
cubricks-toio.js
![](https://i.imgur.com/zXYb1rJ.png)

interpreter.js
![](https://i.imgur.com/niybNAg.png)

Elm.main
![](https://i.imgur.com/JkkVnDr.png)

index.html
![](https://i.imgur.com/z1DfNDP.png)

実際の所、実行できるが思い通りに動かない。
今ある問題点として、実行した際にcube.on("position-id", data)が上手く実行されず
angleやcubeX,cubeYなどの値がNaNになってしまう。

おそらくcube.on("position-id", data)を取得するのに時間がかかってしまい、先に変数代入が行われてしまうため、
今回の問題が発生したと思っている。
position-idの抽出がもう少し上手く行えればできるかもしれない。
来週はそこの完成を目指したい。