本文整理汇总了C#中Segment.Distance方法的典型用法代码示例。如果您正苦于以下问题:C# Segment.Distance方法的具体用法?C# Segment.Distance怎么用?C# Segment.Distance使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Segment
的用法示例。
在下文中一共展示了Segment.Distance方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ChercheTrajectoire
public static Trajectoire ChercheTrajectoire(Graph graph, List<IForme> obstacles, Position positionActuell, Position destination, double rayonSecurite, double distanceSecuriteCote)
{
DateTime debut = DateTime.Now;
double distanceRaccordable = 150;
double distance;
bool cheminTrouve = false;
bool raccordable = false;
Trajectoire trajectoire = new Trajectoire();
trajectoire.AngleDepart = new Angle(positionActuell.Angle);
trajectoire.AngleFinal = new Angle(destination.Angle);
PointsTrouves = new List<PointReel>();
PointsTrouves.Add(new PointReel(positionActuell.Coordonnees));
trajectoire.AjouterPoint(new PointReel(positionActuell.Coordonnees));
Synchronizer.Lock(graph);
int nbPointsDepart = 0;
int nbPointsArrivee = 0;
Node debutNode;
Node nodeProche = graph.ClosestNode(positionActuell.Coordonnees.X, positionActuell.Coordonnees.Y, 0, out distance, false);
if (distance != 0)
{
debutNode = new Node(positionActuell.Coordonnees.X, positionActuell.Coordonnees.Y, 0);
nbPointsDepart = graph.AddNode(debutNode, obstacles, rayonSecurite, distanceRaccordable);
}
else
debutNode = nodeProche;
if (nbPointsDepart == 0)
{
// On ne peut pas partir de là où on est
Position positionTestee = new Position(positionActuell);
bool franchissable = true;
// Boucle jusqu'à trouver un point qui se connecte au graph jusqu'à 1m devant
int i;
for (i = 0; i < 100 && !raccordable; i += 1)
{
positionTestee.Avancer(10);
debutNode = new Node(positionTestee.Coordonnees.X, positionTestee.Coordonnees.Y, 0);
raccordable = graph.Raccordable(debutNode, obstacles, rayonSecurite, distanceRaccordable);
}
// Le point à i*10 mm devant nous est reliable au graph, on cherche à l'atteindre
if (raccordable)
{
Segment segmentTest = new Segment(new PointReel(positionTestee.Coordonnees), new PointReel(positionActuell.Coordonnees));
// Test des obstacles
Synchronizer.Lock(Plateau.ObstaclesBalise);
foreach (IForme obstacle in obstacles)
{
if (obstacle.Distance(segmentTest) < distanceSecuriteCote)
{
franchissable = false;
// Si l'obstacle génant est un adversaire, on diminue petit à petit son rayon pour pouvoir s'échapper au bout d'un moment
if (Plateau.ObstaclesBalise.Contains(obstacle) && Plateau.RayonAdversaire > 50)
{
Robots.GrosRobot.Historique.Log("Adversaire au contact, impossible de s'enfuir, réduction du périmètre adverse", TypeLog.PathFinding);
Plateau.RayonAdversaire -= 10;
}
}
}
Synchronizer.Unlock(Plateau.ObstaclesBalise);
// Si le semgent entre notre position et le graph relié au graph est parcourable on y va !
if (franchissable)
{
PointsTrouves.Add(new PointReel(positionTestee.Coordonnees));
trajectoire.AjouterPoint(new PointReel(positionTestee.Coordonnees));
debutNode = new Node(positionTestee.Coordonnees.X, positionTestee.Coordonnees.Y, 0);
nbPointsDepart = graph.AddNode(debutNode, obstacles, rayonSecurite, distanceRaccordable);
}
}
else
franchissable = false;
// Si toujours pas, on teste en marche arrière
if (!franchissable)
{
franchissable = true;
nbPointsDepart = 0;
positionTestee = new Position(positionActuell);
for (i = 0; i > -100 && !raccordable; i--)
{
positionTestee.Avancer(-10);
debutNode = new Node(positionTestee.Coordonnees.X, positionTestee.Coordonnees.Y, 0);
raccordable = graph.Raccordable(debutNode, obstacles, rayonSecurite, distanceRaccordable);
}
// Le point à i*10 mm derrière nous est reliable au graph, on cherche à l'atteindre
//.........这里部分代码省略.........