JavaScript Canvas 外摆线

2015/03/15 | 1分钟阅读 | 更新于 2015/03/15

起题目好难。。

概述

用js计算,用canvas绘制,实现机械臂的时候因为一点小问题不小心画出了一堆外摆线 的图。 先说一下我的设计方案 以x轴正方向为零度,逆时针旋转一定大小的角度。(这句话是不是没说明白。。就是大家熟悉的坐标系) 主要有两根线,第一根线AB绕点A旋转,线BC绕点B旋转,B点坐标为A点坐标加上角1的余弦/正弦值乘AB的长度 然后角2为角1加上BC相对AB旋转的角度,C点坐标为B点坐标机上BC长度乘上角2的余弦和正弦值。 改变角1和角2,就会确定ABC各自的位置 然后

上图

多图!

下面的格式为角1每和角2每次递增的值!

起始角,角1为120,角2为-120

-10,10

-10,20

-10,50

-10,60

-10,130

-10,360

-10,720

-3,1

-3,5

-3,13

-3,13 完整

-3,133

丢代码

<html>
  <body>
    <canvas id="cc" width="800" height="800"></canvas>
  </body>
  <script>
    var canvas = document.getElementById("cc");
    var paper = cc.getContext("2d");

    var len1 = 140;
    var len2 = 100;

    function drawArm(angleA, angleB) {
      angleA *= Math.PI / 180;
      angleB *= Math.PI / 180;
      paper.beginPath();
      paper.lineWidth = "3";
      var X0 = 400;
      var Y0 = 400;
      paper.closePath();
      paper.beginPath();
      paper.moveTo(X0, Y0);
      var X1 = X0 + len1 * Math.cos(angleA);
      var Y1 = Y0 - len1 * Math.sin(angleA);
      paper.lineTo(X1, Y1);
      paper.stroke();
      paper.closePath();
      paper.beginPath();
      paper.arc(X1, Y1, 2, 0, Math.PI * 2, false);
      paper.fill();
      paper.closePath();

      paper.beginPath();
      paper.strokeStyle = "#125096";
      paper.moveTo(X1, Y1);
      var X2 = X1 + len2 * Math.cos(angleA + angleB);
      var Y2 = Y1 - len2 * Math.sin(angleA + angleB);
      paper.lineTo(X2, Y2);
      paper.stroke();
      paper.closePath();

      paper.beginPath();
      paper.arc(X2, Y2, 2, 0, Math.PI * 2, false);
      paper.fill();
      paper.closePath();
      paper.strokeStyle = "#000000";
    }
    var a1 = 120; //角1
    var a2 = -70; //角2
    var dTime = 60;
    var isContinue = true;
    var a = 0;
    function gameLoop() {
      //paper.clearRect(0,0,800,800);
      drawArm(a1, a2);
      a1 -= 5; // 角1增量
      a2 += 5; // 角2增量
      a++;
      if (a >= 30) {
        //isContinue=true;
        /*a1=120; 
            a2=-120;
            a=0;*/
      }

      if (isContinue) {
        setTimeout("gameLoop()", dTime);
      }
    }
    gameLoop();
  </script>
</html>

© 2026 香蕉引擎故障报告

🌱 Powered by Hugo with theme Dream.

关于

要怎么介绍自己呢,🤔。

很早以前是作为 Web 前端在学习的,但是工作第一年就成为了全干工程师。喜欢尝试各种东西,什么都会一点。

一直很喜欢 Ebiten 游戏引擎 ,特别简洁,用它做过一些小东西,可以查看这个分类 。另外特别推荐这个木鱼 ,是一个相对完整的小玩意儿,包含手搓的一个简单的 UI 框架;支持鼠标和键盘操作;有多语言和主题切换功能;同时支持 Web 端和客户端。它的源代码在 bin16/wooden-fish

主题

网站基于 Hugo,当前使用的是 hugo-theme-dream 主题的修改版 ,根据我的需要,做了一些对 PaperMod 的兼容。

我自己也写过主题 ,但是没有别人写的好看。

正在从我的笔记中往外搬运内容

等待更新:

  • 从《锈湖》中学了些什么东西
  • 我拿 React 写解谜游戏的经过
  • 基于 Pocketbase 的 Pocket Memos
  • 数独!