En essayant de calculer la différence de Minkowski de deux polygones convexes, je peux simplement trouver l'ensemble des sommets et utiliser un algorithme d'emballage de cadeaux pour trouver la coque convexe. (Différence de Minkowski avec des polygones concaves
Cependant, pour les polygones concaves, l'algorithme de coque convexe n'est pas approprié car il me donnera un faux positif sur les collisions, est-il possible d'adapter mon code pour trouver facilement la bonne expansion en utilisant les points déjà généré?
public List<Vector2D> MinkowskiDifference(Polygon other)
{
List<Vector2D> vList = new List<Vector2D>();
foreach (Vector2D vT in this.vertices)
{
foreach (Vector2D vO in other.vertices)
{
vList.Add((vT+this.position) - (vO+other.position));
}
}
return vList;
}
public static Polygon ConvexHull(List<Vector2D> vList)
{
List<Vector2D> S = vList;
List<Vector2D> P = new List<Vector2D>();
Vector2D endpoint;
Vector2D pointOnHull = LeftMostPoint(S);
int i = 0;
do
{
P.Add(pointOnHull);
endpoint = S[0];
for (int j = 1; j < S.Count; j++)
{
if (endpoint == pointOnHull || RelPosition(P[i], endpoint, S[j]) == -1)
{
endpoint = S[j];
}
}
i++;
pointOnHull = endpoint;
} while (endpoint != P[0]);
return new Polygon(P);
}
Merci pour la réponse, c'est évidemment quelque chose que je vais devoir faire encore plus de lecture en. –