der Meinung sind, dass diese Frage am schwierigsten ist, eine Karte zu erstellen, finden Sie einen Kartenaufbau mit dem kürzesten Pfad, nachdem beispielsweise unter meiner Kartenerstellungsmethode zunächst das Start- und Endpunkt von pos [] und der Endpunkt jedes Segments als Wand angezeigt werden Die Eckpunkte des Diagramms (entfernen Sie die beiden Punkte der Wandwurzel, da dies bedeutungslos ist). Verwenden Sie dann das Array seg [] [], um die Informationen jedes Liniensegments jeder Wand darzustellen. Seg [i] [] repräsentiert die Informationen der i-ten Wand. Der Zweck dieses Arrays besteht hauptsächlich darin, alle zwei Punkte des Arrays pos [] zu durchlaufen Beurteilen Sie, ob die Kante gebaut werden kann. Wenn das durch diese beiden Punkte gebildete Liniensegment durch die Wand zwischen (die ein bestimmtes Liniensegment in der Wand schneidet) blockiert wird, kann die Kante nicht gebaut werden, andernfalls wird die Kante gebaut. Hier werde ich darüber sprechen, wie zu beurteilen ist, ob sich die Liniensegmente ab und cd schneiden.
Wenn sich zwei Liniensegmente schneiden, gibt es ca ⃗ × cb ⃗ \ vec {ca} \ times \ vec {cb}c a×c b和da ⃗ × db ⃗ \ vec {da} \ times \ vec {db}d a×d bUnterschiedliches Vorzeichen und da ⃗ × ca ⃗ \ vec {da} \ times \ vec {ca}d a×c aUnd db ⃗ × cb ⃗ \ vec {db} \ times \ vec {cb}d b×c bEs ist auch ein entgegengesetztes Vorzeichen. Wenn diese beiden Bedingungen gleichzeitig erfüllt sind, ist es der Schnittpunkt. Ich habe nur geschrieben, dass eine Bedingung erfüllt ist, aber dies ist keine ausreichende Bedingung für die Beurteilung des Schnittpunkts der Liniensegmente. Dies liegt daran, dass die in dieser Frage angegebenen Daten etwas Besonderes sind. Ich hoffe, dass alle Weiß es einfach.