User interface 拖动+;随身体行为而下降
我想实现一个拖动功能,用户可以在工作区中拖动对象。这当然是容易的一点。困难的一点是尝试使其成为一个物理上正确的拖动,其中包含由于扭矩力矩而产生的旋转(想象一下,仅使用一个手指在桌子上拖动一本书,它在拖动时如何旋转?) 有人知道我在哪里可以找到关于如何编码的解释吗(仅二维,仅矩形,无需摩擦) 非常感谢, 大卫User interface 拖动+;随身体行为而下降,user-interface,graphics,2d,draggable,User Interface,Graphics,2d,Draggable,我想实现一个拖动功能,用户可以在工作区中拖动对象。这当然是容易的一点。困难的一点是尝试使其成为一个物理上正确的拖动,其中包含由于扭矩力矩而产生的旋转(想象一下,仅使用一个手指在桌子上拖动一本书,它在拖动时如何旋转?) 有人知道我在哪里可以找到关于如何编码的解释吗(仅二维,仅矩形,无需摩擦) 非常感谢, 大卫 编辑: 我写了一个小应用程序(行为明显错误),我希望它能比文字更好地传达我所寻找的东西 编辑2: 调整示例项目以提供可接受的行为。新的源代码(和编译的exe)可用。用C#2008写成。我
编辑: 我写了一个小应用程序(行为明显错误),我希望它能比文字更好地传达我所寻找的东西
编辑2:
调整示例项目以提供可接受的行为。新的源代码(和编译的exe)可用。用C#2008写成。我提供的代码没有任何版权,可以随意使用/修改/任何东西。无需通知我或提及我。这似乎是一个基本的物理问题 你需要知道点击的位置,这将告诉你他们是在推还是拉,所以,尽管你是在2D中进行这项工作,你的计算需要在3D中进行,你对他们点击位置的感知将在3D中进行 每个项目都有属性,例如质量,可能还有空气阻力的信息,因为空气有助于提供运动 您还需要根据用户移动鼠标的速度做出不同的反应 因此,他们可能能够以比可能更快的速度移动2吨重的物体,您只需要适应这种情况,因为如果拖动的物体比鼠标指针慢,用户将不会高兴。哪种语言
扭矩是施加力的点和物体质心之间垂直于矢量投影的作用力。所以,如果你垂直于直径拉动,扭矩等于施加的力。如果直接远离质心,扭矩为零 您通常希望通过建模一个弹簧来实现这一点,该弹簧将原始鼠标下降点连接到鼠标的当前位置(在对象局部坐标中)。使用弹簧和一些摩擦可以稍微平滑鼠标的运动
我听说花栗鼠作为2D物理软件包有很多好处:
好了,时间不早了,我需要睡觉了。但这里有一些出发点。可以在一个坐标空间中执行所有计算,也可以为每个对象定义一个坐标空间。在大多数动画系统中,人们使用每个对象的坐标空间,并使用来转换,因为这使数学更容易 计算的基本顺序是:
或者,也许你只是想假装。在这种情况下,只需存储矩形的(x,y)位置及其当前旋转φ。然后,执行以下操作:
嗨,詹姆斯,这远远超出了我要找的范围。不需要考虑与地平面的摩擦,不需要处理不同质量的物体,不需要与其他物体碰撞,当然也不需要考虑气流。我甚至不确定我想让物体在我放开鼠标后继续移动。@David Rutten-如果你不考虑空气摩擦力和速度,你怎么计算会发生什么?如果我点击物体的某一部分并拉动,什么力量会使它旋转?@James,物体有围绕质心旋转的倾向。如果我把物体拉到这个点以外的任何地方,它都会平移和旋转。如果运动速度足够慢,物体的动量就可以忽略。我可以阅读很多语言,但这最终会出现在C#或VB.NET中。该链接的源确实讨论了变换,但没有讨论如何从拖动向量计算这些变换。感谢Mark,拖动角度一定是等式的一部分,只是还没有找到一个很好的方法来合并它。(我编辑了原始帖子,并在示例应用程序中添加了下载链接)。你有没有关于如何构造(和求解)这样一个弹簧系统的例子?我担心你会问一个例子:-)我已经有一段时间没有这样做了,但我会通过上面的一些等式…嘿,任何好事都会受到惩罚。我一直在浏览花栗鼠,它确实令人印象深刻。但我犹豫是否将整个项目添加到我的应用程序中,仅仅是为了允许旋转盒子。我很确定一定有一种模仿物理的好方法