permet de dire que j'ai mon premier point struct: et ma deuxième: p> Je veux obtenir tous les points entre le début et la fin. Donc, par exemple, je voudrais 2,9 et 3,9 dans un tableau. Est-ce que .net a quelque chose de construit pour cela? P> p>
4 Réponses :
Il n'y a pas de fonctions de construction pour cela, car il n'y a pas de points entre points. Mathématique, il y a une ligne entre deux points. En termes de graphiques informatiques, des lignes pourraient être antialiasées et donc ne pas être arrondies aux nombres entiers complets. P>
Si vous recherchez une méthode rapide de créer tous les nombres intégrés entre entre -ges, je suppose que Bresenhams-ligne-algorithme serait votre choix. Mais cela n'est pas construit à .NET, vous devez le coder vous-même (ou prendre la mise en œuvre de Matthew Watson): P>
http://fr.wikipedia.org/wiki/breresenham's_line_algorithm << / p>
Il y a même des algorithmes Fasther pour le faire, mais j'irais pour Bresenham. P>
C'est ce que j'ai fini par faire. Comme @Cody Grey mentionné dans son commentaire, il y a des points infinis sur une ligne. Vous devez donc spécifier le nombre de points que vous souhaitez récupérer.
ma classe de ligne: p>
Utilisation: P> var line = new Line(new Point(10, 15), new Point(297, 316));
var points = line.getPoints(20);
@Birajzalavadia absolument!
Je sais que cela fait longtemps que vous avez posé cette question pour la première fois, je cherchais quelque chose de similaire récemment et j'ai trouvé ce wiki ( https://fr.wikipedia.org/wiki/breresenham%27s_line_algorithme ), qui contenait du pseudo code.
J'ai donc mis en place une fonction avec le pseudo code pour effectuer cette Calcul et ajoutez les points à une liste. p>
Vous pouvez entrer entre des points en dessous du code ci-dessous. Il suffit de définir que le nombre de points entre deux points. Ici, j'ai défini comme 10 points.
PointF pStart = new PointF(10, 10);
PointF pEnd = new PointF(100, 100);
PointF[] betPoints = new PointF[10];
for (int i = 1; i <= 10; i++)
{
betPoints[i].X = (Math.Abs(pStart.X - pEnd.X) / 10) * i + pEnd.X;
betPoints[i].Y = (Math.Abs(pStart.Y - pEnd.Y) / 10) * i + pEnd.Y;
}
en.wikipedia.org/wiki/breResenham's_line_algorithm
Il y a infiniment beaucoup de points i> qui se trouvent entre deux points. Tu les veux tous?
@Codygray A
point code> contient deux valeurs entières. Au moins, cela fait dans la mise en œuvre de XNA. Le lien de Patashu est probablement pertinent.@Sethbattin Winforms utilise également des points entier, mais WPF utilise des doubles. Nous pouvons probablement récupérer l'intention du contexte, mais c'est un point valable pour s'assurer de.
@Theevilpenguin assez juste
Voici une implémentation de Bresenham en C # qui renvoie un
ienumerable code>, ce qui rend très facile à utiliser Définissez ce que vous voulez dire avec «entre». Voulez-vous tous les points sur la route la plus courte qui utilise uniquement des coordonnées entier entre les points aux points?
@Matthewwatson J'ai utilisé le lien que vous avez fourni pour résoudre ma question. Vous devez mettre ce lien dans une réponse afin que je puisse l'accepter.