Обработка столкновений для движущихся прямоугольников - PullRequest
0 голосов
/ 04 октября 2010

в моем приложении Silverlight 3 я отображаю дерево. Самодельный пользовательский элемент управления используется для триодов, объект LineArrow для соединений. После первоначального отображения дерева я хочу, чтобы узлы двигались по следующим «физическим свойствам»

  • есть гравитационная сила, которая тянет узел вниз
  • есть вектор силы для его родителя
  • это дети рисуют его на середине

Естественно, мои пользовательские элементы управления скоро будут перекрываться. Но я не хочу, чтобы они перекрывались. С точки зрения физики я хочу, чтобы они были твердыми объектами и соблюдали физическое правило, согласно которому никакие два объекта не могут занимать одно и то же пространство.

Есть предложения, как решить эту проблему? Я не хочу использовать для этого физический движок, такой как предсказатель, потому что описанная часть - единственная физика, которая используется в моем проекте.

Заранее спасибо,
Frank

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Вы можете смоделировать их как «почти сплошные» объекты, просто добавляя очень большую силу между ними всякий раз, когда они перекрываются. Рассчитайте вектор центра от центра, нормализуйте его, возможно, умножьте на перекрытие, а затем примените это как силу к каждому объекту.

Даже если вы не используете полную библиотеку Farseer, вы все равно можете найти в ней несколько полезных классов, таких как Vector2.

0 голосов
/ 05 октября 2010

Ваш контроль квадратной формы?Или вы можете создать ограничивающие рамки?Если это так, вы можете создать структуру System.Windows.Rect для каждого и использовать метод Rect.Insersect для проверки пересечения.

...