Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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_Coordinates - Fatal编程技术网

Javascript:将球保持在圆内动画

Javascript:将球保持在圆内动画,javascript,animation,coordinates,Javascript,Animation,Coordinates,我有一个球的程序,它沿着屏幕上的光标,在html画布上 我在屏幕上也有一个圆圈,我需要让这个球保持在圆圈内 下面是将球保持在画布内的当前条件 if(ball.x < 0 || ball.x > canvas.width) ball.dx = -ball.dx; if(ball.y < 0 || ball.y > canvas.height) ball.dy = -ball.dy; 格式:圆弧(x、y、半径、起点、终点、假) 如何通过不允许圆心向外移动来利用圆心 谢谢。在

我有一个球的程序,它沿着屏幕上的光标,在html画布上

我在屏幕上也有一个圆圈,我需要让这个球保持在圆圈内

下面是将球保持在画布内的当前条件

if(ball.x < 0 || ball.x > canvas.width)
ball.dx = -ball.dx;
if(ball.y < 0 || ball.y > canvas.height)
ball.dy = -ball.dy;
格式:圆弧(x、y、半径、起点、终点、假)

如何通过不允许圆心向外移动来利用圆心


谢谢。

在这一点上我可能完全错了,但你不能只用毕达哥拉斯定理吗<代码>(a*a)+(b*b)=(c*c)

画布的中心是0,0

你的圆弧半径是60

球的位置是29,-29

function isInsideCircle(ball,radius){
    var a=Math.pow(ball.x,2);
    var b=Math.pow(ball.y,2);
    var c=Math.sqrt(a+b);
    return c<radius;
}
函数为分圆(球,半径){
var a=数学功率(ball.x,2);
var b=数学功率(ball.y,2);
var c=数学sqrt(a+b);

return c在这一点上我可能是完全错误的,但是你不能仅仅使用毕达哥拉斯定理吗?
(a*a)+(b*b)=(c*c)

画布的中心是0,0

你的圆弧半径是60

球的位置是29,-29

function isInsideCircle(ball,radius){
    var a=Math.pow(ball.x,2);
    var b=Math.pow(ball.y,2);
    var c=Math.sqrt(a+b);
    return c<radius;
}
函数为分圆(球,半径){
var a=数学功率(ball.x,2);
var b=数学功率(ball.y,2);
var c=数学sqrt(a+b);

返回c每次必须计算边界的
x
y
坐标。边界基本上围绕整个圆运行。该点是圆心与当前
x
y
鼠标坐标与圆之间的交点。限制条件n表示这条线的长度不超过圆的半径。因此,如果圆的中心与当前
x
y
之间的距离大于圆的半径,则必须将
x
y
坐标限制在圆周上在这个圈子里

圆的方程式为:

x^2 + y^2 = r^2
其中
r
是圆的半径

直线的方程式为:

y = mx + c
其中,
m
是斜率,
c
是偏移量。在我们的例子中,我们假设原点是圆的中心,因此我们没有
c
,这意味着方程是:

y = mx
那么
m
的值呢?
m
是我们的斜率,我们可以通过运行期间的上升来计算:

rise = ball.x - yCircleCenter
run = ball.y - xCircleCenter
这意味着我们生产线的方程式为:

y = (rise / run) * x
您可以将
x
y
的值代入圆方程,以计算出位于圆周长上的
x
y
,从而得出:

x_on_circle = (r * run) / sqrt(rise^2 + run^2)
y_on_circle = (r * rise) / sqrt(rise^2 + run^2)
假设这是一个名为
limit
的函数,您可以执行以下操作:

var distance = Math.sqrt(((ball.x - xCircleCenter) ^ 2) + ((ball.y - yCircleCenter) ^ 2));
if(distance > radius) {
    var limitedCoordinates = limit(ball.x, ball.y);
    ball.x = limitedCoordinates.x;
    ball.y = limitedCoordinates.y
}

每次都必须计算边界的
x
y
坐标。边界基本上围绕整个圆运行。该点是圆中心与当前
x
y
鼠标坐标与圆之间的线的交点。限制条件为t这条线的长度不超过圆的半径。因此,如果圆的中心与当前
x
y
之间的距离大于圆的半径,则必须将
x
y
坐标限制在c的圆周上圆圈

圆的方程式为:

x^2 + y^2 = r^2
其中
r
是圆的半径

直线的方程式为:

y = mx + c
其中,
m
是斜率,
c
是偏移量。在我们的例子中,我们假设原点是圆的中心,因此我们没有
c
,这意味着方程是:

y = mx
那么
m
的值呢?
m
是我们的斜率,我们可以通过运行期间的上升来计算:

rise = ball.x - yCircleCenter
run = ball.y - xCircleCenter
这意味着我们生产线的方程式为:

y = (rise / run) * x
您可以将
x
y
的值代入圆方程,以计算出位于圆周长上的
x
y
,从而得出:

x_on_circle = (r * run) / sqrt(rise^2 + run^2)
y_on_circle = (r * rise) / sqrt(rise^2 + run^2)
假设这是一个名为
limit
的函数,您可以执行以下操作:

var distance = Math.sqrt(((ball.x - xCircleCenter) ^ 2) + ((ball.y - yCircleCenter) ^ 2));
if(distance > radius) {
    var limitedCoordinates = limit(ball.x, ball.y);
    ball.x = limitedCoordinates.x;
    ball.y = limitedCoordinates.y
}

虽然这告诉他球是在圆的外面还是里面,但这并不能帮助他限制球的坐标沿着圆的圆周。我知道人们可以从上下文中理解你的意思,但是:
a^2+b^2=c^2
不是毕达哥拉斯定理,它是一个无意义的方程。@IngoBürk
a^2+b^2=c^2被称为斜边,
a
b
c
被解释为直角三角形的边,以
c
作为斜边。而一般来说,这种形式的方程可以表示其他东西(如圆),与
a
b
c
一起使用它通常被解释为毕达哥拉斯方程。它肯定不是毫无意义的。@IngoBürk当然,没问题,我同意;一个定理和一个方程是不同的。哈哈。很多评论。当我在七年级时学习到这一点时,它是帕萨戈里亚定理,所以我可能是个20年前我还没有把斜边的细节包括进去,因为斜边是基于一个假想的直角三角形,从圆心到球坐标,相对于x轴和y轴。我想我可以把它包括进去……而这告诉他球是在圈外还是圈内le,这并不能帮助他限制球的坐标沿圆周。我知道你可以从上下文中理解你的意思,但是:
a^2+b^2=c^2
不是毕达哥拉斯定理,它是一个无意义的方程。@IngoBürk
a^2+b^2=c^2
被称为,而
a
b
c
被解释为侧面