Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在画布中围绕着另一个圆旋转的方向上移动圆_Javascript_Animation_Dom_Canvas_P5.js - Fatal编程技术网

Javascript 在画布中围绕着另一个圆旋转的方向上移动圆

Javascript 在画布中围绕着另一个圆旋转的方向上移动圆,javascript,animation,dom,canvas,p5.js,Javascript,Animation,Dom,Canvas,P5.js,当按下一个按钮时,我有一个问题,就是把大圆移向小圆的方向。有人能帮忙吗 目标: 在画布上画一个圆圈[完成] 画一个围绕大圆旋转的小圆[完成] 当按下按钮时,将大圆移动5个像素,此时指向小圆的方向[待定] 移动[挂起]时添加图形效果 我们可以在按下按钮的点使用下面的x和y坐标,并沿该方向移动主圆吗?如果我错了,请纠正我 let x = r *2* cos(angle); let y = r *2* sin(angle); let angle=0; 函数设置(){ createCanvas(

当按下一个按钮时,我有一个问题,就是把大圆移向小圆的方向。有人能帮忙吗

目标:

  • 在画布上画一个圆圈[完成]
  • 画一个围绕大圆旋转的小圆[完成]
  • 当按下按钮时,将大圆移动5个像素,此时指向小圆的方向[待定]
  • 移动[挂起]时添加图形效果
  • 我们可以在按下按钮的点使用下面的x和y坐标,并沿该方向移动主圆吗?如果我错了,请纠正我

    let x = r *2* cos(angle);
    
    
    let y = r *2* sin(angle);
    
    let angle=0;
    函数设置(){
    createCanvas(400400);
    }
    函数绘图(){
    背景(0);
    中风(255);
    冲程重量(4);
    设cir=createVector(200200);
    设速度=createVector();
    设r=10;
    k=圆(cir.x,cir.y,r*2);
    冲程重量(4);
    中风(255);
    设x=r*2*cos(角);
    设y=r*2*sin(角度);
    翻译(200200);
    点(x,y);
    角度+=0.01;
    如果(按下鼠标){
    k、 x+=x;
    k、 y+=y;
    }
    }

    您可以沿着小圆的方向移动大圆,同时通过跟踪大圆的中心,使小圆围绕大圆旋转

    将变量
    cir
    移到绘图之外,以便我们保留对其所做的任何更改

    我们还需要计算从大圆和小圆的中心沿线段的5px移动。要做到这一点,我们可以在这个解决方案中使用公式

    为了防止小圆在移动过程中旋转,我们只能在鼠标未落下时增加旋转角度

    let angle=0;
    让cir;
    函数设置(){
    createCanvas(400400);
    cir=createVector(200200);
    }
    函数绘图(){
    背景(0);
    中风(255);
    冲程重量(4);
    设r=10;
    圆(cir.x,cir.y,r*2);
    冲程重量(4);
    中风(255);
    设x=r*2*cos(角);
    设y=r*2*sin(角度);
    点(x+cir.x,y+cir.y);
    如果(按下鼠标){
    cir.x=(1-0.025)*cir.x+0.025*(x+cir.x);
    cir.y=(1-0.025)*cir.y+0.025*(y+cir.y);
    }否则{
    角度+=0.01;
    }
    }

    非常感谢您。你能解释这一行吗?
    cir.x=(1-0.025)*cir.x+0.025*(x+cir.x)
    以及您获取这些值的原因。是否可以在移动时停止小圆的旋转,并在停止后继续?是的,请参阅我修改的代码。为了停止旋转,我们只需跳过增加角度。cir.x=(1-0.025)*cir.x+0.025*(x+cir.x);通过将大圆中心点和小圆位置插入到用于在线段上查找点的公式中,计算大圆的新x位置。有关更多详细信息,请参阅链接。谢谢,快速提问,我们如何为其添加加速功能?。我试着补充说,它正在加速,但并没有改变它的方向。当我仅仅增加0.025的值时,它是工作的,但是我需要稳定地增加它的速度。你能帮忙吗