7
votes

Comment puis-je obtenir tous les points entre deux objets points?

permet de dire que j'ai mon premier point struct: xxx

et ma deuxième: xxx

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?


8 commentaires

en.wikipedia.org/wiki/breResenham's_line_algorithm


Il y a infiniment beaucoup de points qui se trouvent entre deux points. Tu les veux tous?


@Codygray A point 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 , 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.


4 Réponses :


9
votes

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.

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):

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.


0 commentaires

12
votes

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> xxx pré>


Utilisation: P>

var line = new Line(new Point(10, 15), new Point(297, 316));
var points = line.getPoints(20);


1 commentaires

@Birajzalavadia absolument!



2
votes

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. xxx


0 commentaires

0
votes

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;
}


0 commentaires