Используя немного кода, подобного следующему:
static bool Intersects(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2, out Vector2 intersection)
{
intersection = Vector2.Zero;
Vector2 b = a2 - a1;
Vector2 d = b2 - b1;
float bDotDPerp = b.X * d.Y - b.Y * d.X;
if (bDotDPerp == 0)
return false;
Vector2 c = b1 - a1;
float t = (c.X * d.Y - c.Y * d.X) / bDotDPerp;
if (t < 0 || t > 1)
return false;
float u = (c.X * b.Y - c.Y * b.X) / bDotDPerp;
if (u < 0 || u > 1)
return false;
intersection = a1 + t * b;
return true;
}
Я могу определить, где сталкиваются две строки.Однако координаты даны относительно окна, а не друг друга.Например, скажем, две линии перпендикулярны друг другу.Один из них перекрывает второй по одному пикселю при 0,0.Это будет означать, что для разрешения этого столкновения мне нужно будет вернуться на 1 пиксель назад.Однако, если бы я выполнил этот же тест, скажем, 400 400, он сказал бы, что он пересекается в 399, 399. Очевидно, мне не нужно разрешать коллизию 399, 399.используйте эту информацию, чтобы узнать, насколько много линии перекрываются, поэтому я могу переместить их обратно соответствующим образом.Что я должен сделать, чтобы сделать это?