Javascript:将球保持在圆内动画
我有一个球的程序,它沿着屏幕上的光标,在html画布上 我在屏幕上也有一个圆圈,我需要让这个球保持在圆圈内 下面是将球保持在画布内的当前条件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、半径、起点、终点、假) 如何通过不允许圆心向外移动来利用圆心 谢谢。在
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ürka^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ürka^2+b^2=c^2
被称为,而a
和b
和c
被解释为侧面