2010-02-03 11 views
1

J'ai un triangle rectangle et je veux vérifier si un point donné est sur l'hypoténuse de ce triangle. Tous les points sont des entiers simples, pas des variables à virgule flottante. https://tape.bplaced.net/dl/example2.pngComment vérifier si un point (int - Coordonnées) est dans l'hypoténuse d'un triangle

Edit: Tous les carrés verts seraient sur l'hypoténuse, les carrés blancs non. Je sais x, y, les coordonnées des coins et les coordonnées du point que je veux tester. Toutes les coordonnées sont des nombres entiers (y est un peu en retrait dans le dessin, désolé).

+1

Que voulez-vous dire "sur l'hypoténuse"? De cet exemple, je dirais que n'importe quoi dans les limites de la boîte décrite par le triangle serait admissible. Pouvez-vous ajouter quelques points qui ne sont pas "sur l'hypoténuse". – meagar

+0

@raphaelr: Votre image 404d. – kennytm

+0

bien, fixe. – raphaelr

Répondre

1

Cela pourrait fonctionner:

Vous connaissez le triangle, donc il suffit de créer la fonction de l'hypoténuse, dans votre exemple, il serait y = 5x/12. Si vous obtenez un point, disons x = 6, y = 3, vous pouvez utiliser ces variables pour voir si elles sont exactes: 3 = roundup(5*6/12). Si c'est le cas, le point est sur le triangle, sinon - alors non.

+1

fonctionne parfaitement. – raphaelr

0

Je vais commencer à le faire:

points = an array; 
delta=y/x 
acc = 0 
j = 0 
for (i=0;i<x;i++){ 
    points.push(i, j) 
    acc+=delta 
    while (acc > 1){ 
    acc-=1 
    j++ 
    points.push(i,j) 
    } 
} 

Et puis vous avez tous les points de l'hypoténuse. Il existe de meilleurs algorithmes pour dessiner des lignes, mais cela pourrait être un début.

1

Il y a deux cas à traiter: l'un où l'hypoténuse est verticale et l'autre où elle ne l'est pas.

Pour le cas vertical, il suffit de vérifier si le point en question a une valeur y dans la plage de l'hypoténuse.

Pour le cas non vertical, dérivez l'équation de l'hypoténuse à l'aide de ses extrémités. L'équation d'une droite est y = mx + b où m est la pente qui est dx/dy. Alors b = y - mx. Maintenant que vous avez m et b, voyez si les points x et y d'un point candidat satisfont l'équation (le point y est-il égal à m * x + b?).

Cependant, en pratique, vous devriez vérifier la proximité au lieu de l'égalité exacte, donc vérifiez si le point y est dans un petit delta de (m * x + b).