c# 物体根据鼠标点击移动

效果就是类似桌球那样在窗口上点击哪里鼠标就像着那个角度移动我三角函数学的不太好所以怎么弄都有偏差希望有大神能给说下怎么修改能更加精确一些下面是部分源码:privatedo... 效果就是类似桌球那样 在窗口上点击哪里鼠标就像着那个角度移动 我三角函数学的不太好所以怎么弄都有偏差 希望有大神能给说下怎么修改能更加精确一些 下面是部分源码:
private double x = 500, y = 280;
private double jiaodu = 3.14;
private double speed= 0;
private double moux=0, mouy=0;
private Image image = Image.FromFile(@"08.png");
protected override void OnPaint(PaintEventArgs e)
{
this.DoubleBuffered=true;
Graphics g = e.Graphics;
g.DrawImage(image, (float)x, (float)y, 70, 70);
x += speed * Math.Cos(jiaodu);
y += speed * Math.Sin(jiaodu);
if (x >= 1000-80||x<=0)
{
jiaodu=Math.PI - jiaodu;
}
if (y >= 800 - 102|| y <= 0+60)
{
jiaodu = -jiaodu;
}
if (speed >= 0)
{
speed -= 0.05;
}
else
{
speed = 0;
timer1.Enabled = false;
}
鼠标点击事件:
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
moux = Control.MousePosition.X;
mouy = Control.MousePosition.Y;
speed = Convert.ToInt32(trackBar1.Value) * 5;
jiaodu = Math.Atan2((mouy - y), (moux - x));

//jiaodu = (mouy-y)/Math.Sqrt((mouy - y) * (mouy - y) + (moux - x) * (moux - x));
timer1.Enabled = true;
}
算角度总是算不准 麻烦各位看下谢谢了。
展开
 我来答
百度网友e1b1222
2014-06-25 · TA获得超过955个赞
知道小有建树答主
回答量:470
采纳率:66%
帮助的人:329万
展开全部

给个建议:

  1. 做这种包含数学参照系的程序,先建立参照系,水平和垂直法线,写好所有的象限变换,角度变换函数。

  2. 逻辑坐标和实际程序内坐标要区分开,变量命名规范不容易晕

  3. 涉及到物理计算的程序,先画好图再做,角度计算正确后,再通过逻辑坐标和程序内坐标计算。

更多追问追答
追问
其实也没有那么麻烦。。我就是想试试鼠标点击移动的效果 网上找了好久都找不到类似的效果的。。
追答
  1. 计算初始角度以及初始速度

    当前球体坐标已知(x1,y1),球体半径已知(r),鼠标点击点的坐标已知(x2,y2),点击力量(f自己设定),点击时间(t,计算mouseUp和mouseDown之间的时间间隔)

    初始角度α为:设定该角度为与水平方向顺时针角度的夹角,

    Sinα=Abs(y1-y2)/(sqrt(x1-x2)^2+(y1-y2)^2);这里要注意判断x1,x2,y1,y2的大小关系,以及Sin值的正负关系,来确定方向。

    初始速度v:ft=mv,这个就很简单了,t可以算,m已知,f自己设定,计算出来速度v即可

  2. 墙壁碰撞处理

    上面计算出来了角度,在碰撞墙壁的时候有两种情况,一种是认为能量不损耗直接反弹,则没有什么额外处理,计算出反弹角度即可,小球速度不会变化。

    另一种情况则认为碰撞墙壁有能量有损耗,还是能量守恒定律,mv1=mv2+损耗能量,损耗能量可以自己设定。角度的计算和第一种情况一样。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
驼铃网户外活动
2014-06-24 · TA获得超过695个赞
知道小有建树答主
回答量:677
采纳率:38%
帮助的人:76万
展开全部
这个看得有点头大。。。。
感觉这需求挺简单的,不明白为啥要用三角函数。
不过还不是很明白你的具体要求。
更多追问追答
追问
就是球体碰到窗体边缘的时候反弹用了三角函数 还有就是鼠标点击的时候 我的思路是计算鼠标点击位置和球体位置的线段长度然后求角度。。结果数学功底太差 每次球都乱跑。。不知道这么说有没有感觉思路清晰点呢- -
就是球体碰到窗体边缘的时候反弹用了三角函数 还有就是鼠标点击的时候 我的思路是计算鼠标点击位置和球体位置的线段长度然后求角度。。结果数学功底太差 每次球都乱跑。。不知道这么说有没有感觉思路清晰点呢- -
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式