我正在建模一个基于力的物理模拟,其中有几个粒子彼此交互。粒子可以这样移动,即静态视口很容易失去它们的踪迹(想象一下,整组粒子从屏幕向右移动,视口显示空白背景)。在质心中移动对象视口
我目前的解决方案是简单地寻找X和Y的的最小/最大跟踪粒子的“中心”,并视口的中间遵循。它工作正常(不需要找到质量的真正中心)。这里有一个视觉:
我的问题是我试图手动添加到用鼠标拖动颗粒的能力。我还没有找到一个优雅的方式来做到这一点。问题是视口坐标和模拟坐标之间的转换不断变化,因为视口跟随着粒子的中心。
当我按下鼠标上的一个微粒我希望它有在模拟一个固定的位置(它忽略了它所有的力量)。当我按下鼠标按钮时,我想让粒子在模拟中移动。我已经实现了这一点。但是,由于视口和仍在运动的其他粒子,它会产生令人不快的副作用。当鼠标被按下并静止时,粒子不会在模拟中移动,但它会在屏幕上移动,因为所有粒子的中心会发生变化,并且视口会相应地进行调整。光标是静止的,所以粒子从它下面“移出”。当鼠标轻微移动时,由于光标的新位置表示完全不同的模拟坐标,所以粒子传送回光标下。
对于没有上述副作用的一个很好的,一致的用户体验有什么建议?
我已经想到:
- 暂停模拟,同时按下鼠标时
- 暂停视变化,同时按下鼠标时
- 将鼠标光标移动视口变化(真的很差)
但他们都有其他不良的副作用或t远离模拟的价值。
另外,我觉得这个问题是语言和平台无关的,所以不要附上文字和实现特定的含义为“视口”,“视口坐标”,或“模拟坐标”。将它们视为通用图形概念。
这是非常有趣的,我从来没有想到这一点。鼠标移动会有一个快速跳转,但在拖动这个粒子时会很愉快。我会尽快给您回复 :-) – colithium 2009-07-04 03:43:55