弹性正碰演示系统主要通过三个部分组成:
一,从文本框中 获取小球的初始条件;
二,计算得出碰撞后的小球速度;
三,更新,绘图;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace sy16 { public partial class Form1 : Form { Graphics g; Color c1,c2; //定义两种颜色 Brush b1,b2; Pen p1,p2,p0; //定义两种画笔,分别绘制红、蓝两种小球 Point po1, po2; //两个小球的圆点 int v1, v2; //初始速度 float v11, v22; //碰撞后的速度 int m1, m2; public Form1() { InitializeComponent(); c1 = Color.Red; c2 = Color.Blue; b1 =new SolidBrush(c1); //定义填充画笔 b2 = new SolidBrush(c2); g = panel1.CreateGraphics(); //在panel1面板上定义一个画布 p0 = new Pen(Color.Black,2); //画横线的画笔 p1 = new Pen(c1,2); //画红球的画笔 p2 = new Pen(c2,2); //画蓝球的画笔 } public bool pengzhung() //判断两个小球是否碰撞 { if (Math.Abs( po1.X - po2.X) <= 50) return true; else return false; } private void button1_Click(object sender, EventArgs e)//点击确定后开始演示 { g.DrawLine(p0, 10, 50, 700, 50); //划线 g.DrawEllipse(p1, po1.X,po1.Y, 50, 50); //画红球 g.FillEllipse(b1, po1.X, po1.Y, 50, 50); g.DrawEllipse(p2,po2.X,po2.Y, 50, 50); //画蓝球 g.FillEllipse(b2, po2.X,po2.Y, 50, 50); m1= Int32.Parse(textBox1.Text); //获取并计算数据 m2 = Int32.Parse(textBox2.Text); v1 = Int32.Parse(textBox3.Text); v2 = -Int32.Parse(textBox4.Text); v11 = ((m1 - m2) * v1 + 2 * m2 * v2) / (m1 + m2); v22 = ((m2 - m1) * v2 + 2 * m1 * v1) / (m1 + m2); textBox5.Text = v11.ToString(); textBox6.Text = v22.ToString(); po1 = new Point(10, 25); po2 = new Point(650, 25); timer1.Enabled = true; //计时器开始计时 } private void timer1_Tick(object sender, EventArgs e) { g.Clear(SystemColors.Control); //清空画布上的所有东西,重新绘制 g.DrawLine(p0, 10, 50, 700, 50); po1 = new Point(po1.X + v1 / 20, po1.Y); g.DrawEllipse(p1, po1.X, po1.Y, 50, 50); g.FillEllipse(b1, po1.X, po1.Y, 50, 50); po2 = new Point(po2.X + v2 / 20, po2.Y); g.DrawEllipse(p2, po2.X, po2.Y, 50, 50); g.FillEllipse(b2, po2.X, po2.Y, 50, 50); if (pengzhung()) //如果碰撞,速度就会发生改变 { v1 = (int)v11; v2 = (int)v22; } if (po1.X < 10 || po1.X>650) //如果发生越界,小球就固定在起点 { po1.X = 10; v1 = 0; } if (po1.X < 10 || po2.X > 650) { po2.X = 650; v2 = 0; } if (v1 == 0 && v2 == 0) //如果两个小球速度都停止运动,计时器也就停止工作 timer1.Enabled = false; } } }
多多指正!!