ひろひろの生活日記(LIFE Of HIROHIRO)

パソコン講習とソフト開発をしています。自作小説も掲載しています。ネット情報発信基地(上野博隆)Hirotaka Ueno

ロボットの手足を動かすために追加したロジックです。

2022年10月26日 21時04分20秒 | ゲーム開発(Game development)

 

ロボットの描画です。
各角度を入力した後、『描画』をクリックしてください。ロボットの手足が動きます。
まず、↓のURLをクリックしてください。

ロボット描画

 

var infangle = ["△", "30", "0", "△", "0", "0", "△", "30", "0", "△", "0", "0"];
var inix = 0;
var inerrsw = 0;
var displayarea = "";


function join_calculate2(){
    infangle[1] = document.myFORM.uder1.value;
    infangle[2] = document.myFORM.uder2.value;

    infangle[4] = document.myFORM.asir1.value;
    infangle[5] = document.myFORM.asir2.value;

    infangle[7] = document.myFORM.udel1.value;
    infangle[8] = document.myFORM.udel2.value;

    infangle[10] = document.myFORM.asil1.value;
    infangle[11] = document.myFORM.asil2.value;

    inerrsw = 0;
    for(inix = 0; inix<12 ;inix++){
        num_check();
    }

//    element = document.getElementById("idresult");
//    displayarea = displayarea + " err=" + inerrsw;
//    element.innerHTML = displayarea;


    if(inerrsw === 0) {
        for(inix = 0; inix<12 ;inix++){
           join_rcalculation();

        }
        robotdraw();
    }

    document.myFORM.uder1.value = infangle[1];
    document.myFORM.uder2.value = infangle[2];

    document.myFORM.asir1.value = infangle[4];
    document.myFORM.asir2.value = infangle[5];

    document.myFORM.udel1.value = infangle[7];
    document.myFORM.udel2.value = infangle[8];

    document.myFORM.asil1.value = infangle[10];
    document.myFORM.asil2.value = infangle[11];

}

function num_check(){

    if(isNaN(infangle[inix]) === false){
        if((parseInt(infangle[inix]) >= 0) && (parseInt(infangle[inix]) < 360)) {
    
            jointbl[inix].fangle = parseInt(infangle[inix]);
        } else{
            infangle[inix] = "0";
            inerrsw = 1;
        }
    } else{
        if(infangle[inix] !== "△"){
            infangle[inix] = "0";
            inerrsw = 1;
        }
    }
}

function join_rcalculation(){

// 前の接合点からの描画角度
    if(infangle[inix] !== "△") {

        dr = jointbl[inix].fangle;
//  左側の接合点の場合、角度を360度回転させる。
        if((jointbl[inix].kinds.substr(1,1) === "2") || (jointbl[inix].kinds.substr(1,1) === "4")){
          dr = 360 - dr;
          if(dr >= 360) dr = dr - 360;
        }
        sx = 0; sy = 0;
        //中点xの値の頭が”S”であると前にある種別が同一の座標を参照して計算する。
        //リアル座標xの算出
        //一つ前のテーブルの種別が中点xの値と同じならリアル座標xをsxに入れる。
        //以外は0を編集する。
    
        if(jointbl[inix-1].kinds === jointbl[inix].midpointx){
            sx = jointbl[inix-1].realadx;
        } else {
            sx = 0;
        }
            //cos(コサイン)でx座標を求める。(前の角度+90)ラジアンに直す(パイ/180を乗算する)
        if(dr === 0){
            jointbl[inix].realadx = sx;
        } else {
            jointbl[inix].realadx = parseInt(jointbl[inix].flength*Math.cos((dr+90)*Math.PI/180))+sx;
        }
//        element = document.getElementById("idresult");
//        displayarea = displayarea  + " rx=" + jointbl[inix].realadx;
//        element.innerHTML = displayarea;
        
        //中点yの値の頭が”S”であると前にある種別が同一の座標を参照して計算する。
        //リアル座標yの算出
        //一つ前のテーブルの種別が中点yの値と同じならリアル座標yをsyに入れる。
        //以外は0を編集する。
        if(jointbl[inix-1].kinds === jointbl[inix].midpointy){
            sy = jointbl[inix-1].realady;
        } else {
            sy = 0;
        }
        if(dr === 0){
            jointbl[inix].realady = jointbl[inix].flength + sy;
        } else  {
            //sin(サイン)でy座標を求める。(前の角度+90)ラジアンに直す(パイ/180を乗算する)
            jointbl[inix].realady = parseInt(jointbl[inix].flength*Math.sin((dr+90)*Math.PI/180))+sy;
        }
    }
}


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« マルチ操作理論。 | トップ | 『菩薩の鬼神』の題で小説を... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ゲーム開発(Game development)」カテゴリの最新記事