【ActionScript】二维平面弹性碰撞动画教程

【ActionScript】二维平面弹性碰撞动画

在这里插入图片描述

在二维平面上有两个弹性小球,第一个小球的位置是(x1,y1),速度分量分别为v1x,v1y。第二个小球的位置是(x2,y2),速度分量分别为v2x,v2y.如果发生二维完全弹性碰撞,碰撞后的速度分量分别是多少?

ChatGPT:

碰撞前,两个小球的动量分别为:

p1 = m1 * v1 = m1 * (v1x, v1y)

p2 = m2 * v2 = m2 * (v2x, v2y)

其中,m1 和 m2 分别是两个小球的质量。

由于碰撞是完全弹性的,因此碰撞后,两个小球的动量仍然守恒,即

p1' + p2' = p1 + p2

其中,p1' 和 p2' 分别是碰撞后两个小球的动量。

同时,由于碰撞前后两个小球之间的相对速度方向相反,因此碰撞后两个小球的速度大小不变,方向交换。

因此,碰撞后两个小球的速度分别为:

v1' = ((m1 - m2) * v1 + 2 * m2 * v2) / (m1 + m2)

v2' = ((m2 - m1) * v2 + 2 * m1 * v1) / (m1 + m2)

其中,v1' 和 v2' 分别是碰撞后两个小球的速度,v1 和 v2 是碰撞前两个小球的速度,m1 和 m2 分别是两个小球的质量。

  1. 创建两个动画元件圆形,实例名为c1c2
  2. F9添加以下As脚本代码:
var R:Number = 50;
c1.vx = 20*Math.random();
c1.vy = 20*Math.random();
var vxt:Number = 5;
var vyt:Number = 5;
c2.vx = -10*Math.random();
c2.vy = 10*Math.random();

c1.addEventListener(Event.ENTER_FRAME,Draw1);
c2.addEventListener(Event.ENTER_FRAME,Draw2);
function Draw1(e:Event):void
{
	c1.x += c1.vx;
	c1.y += c1.vy;
	if (c1.x+R >= stage.stageWidth || c1.x-R <= 0) {
		c1.vx = -c1.vx;
	}
	if (c1.y+R >= stage.stageHeight || c1.y-R <= 0) {
		c1.vy = -c1.vy;
	}
	if (Math.sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y)) <= 2*R){
		vxt = c1.vx;
		vyt = c1.vy;
		c1.vx = (2 * c2.vx) / 2;
		c1.vy = (2 * c2.vy) / 2;
		c2.vx = (2 * vxt) / 2;
		c2.vy = (2 * vyt) / 2;
	}
}

function Draw2(e:Event):void
{
	c2.x += c2.vx;
	c2.y += c2.vy;
	if (c2.x+R >= stage.stageWidth || c2.x-R <= 0) {
		c2.vx = -c2.vx;
	}
	if (c2.y+R >= stage.stageHeight || c2.y-R <= 0) {
		c2.vy = -c2.vy;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值