CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Pascal] Vérification intersection segme

-Atacama-
-Atacama-
Niveau 5
22 janvier 2014 à 17:29:57

Bonjour,

J'aimerai savoir comment vérifier que deux segments se coupent ou non, je dispose de deux segments, le premier a les coordonnées {(x1,y1);(x'1,y'1)} et le second ayant les coordonnées {(x2,y2);(x'2,y'2)}.

Pourriez vous m'expliquer comment faire s'il vous plait ? Après quelques recherches je n'ai pas vraiment trouvé.

Merci beaucoup.

angivare
angivare
Niveau 10
22 janvier 2014 à 18:04:07

Tu trouves l'équation de la fonction affine correspondant à chaque droite (vérifie bien qu'elles ne soient pas verticales, c'est un cas à part)
a = (y2-y1)/(x2-x1)
b = y1 - a*x1
y = a*x + b

a est le coefficient directeur, qui permet de savoir quelle est la "pente" de ta droite: si elles sont identiques entre tes deux droites, elles sont parallèles, sinon, elles se croisent.

papy386
papy386
Niveau 10
22 janvier 2014 à 22:03:15

Bonjour

Oui là on peut voir si 2 droites se croise, mais pas des segments.

Donc si a1 = a2 c'est pas bon.

sinon x = (b2-b1)/(a1-a2) et donc tu a le x ou les 2segments se coupent.

Tu auras plus qu'a tester si x est compris entre x1 et x'1 (ou x2 et x'2, c'est pareil).

lokilok
lokilok
Niveau 16
22 janvier 2014 à 22:33:47

Nan mais ce qu'il fait c'est la même chose que toi, tu teste aussi pour deux droites mais après tu regarde juste si le point est dans les segments, ce qu'il a oublié de faire.

-Atacama-
-Atacama-
Niveau 5
23 janvier 2014 à 08:29:07

Merci pour vos réponses je vais regarder ça alors !

yourikahn
yourikahn
Niveau 8
23 janvier 2014 à 10:36:39

boolean void TwoSegmentIntersections(
Vector seg1p1, Vector seg1p2,
Vector seg2p1, Vector seg2p2,
out Vector oIntersection)
{
// point d'intersection au besoin
oIntersection = Vector.zero;

Vector vseg1 = seg1p2 - seg1p1;
Vector vseg2 = seg2p2 - seg2p1;

// colinear test
float crossProduct = vseg1.x * vseg2.y - vseg1.y * vseg2.x;
if (crossProduct == 0)
{
//vecteur colineraire donc pas d'intersection possible
return false;
}

// projection des vecteurs
Vector c = seg2p1 - seg1p1;
float t = (c.x * vseg2.y - c.y * vseg2.x) / crossProduct;
if ((t < 0) || (t > 1))
{
return false;
}

float u = (c.x * vseg1.y - c.y * vseg1.x) / crossProduct;
if ((u < 0) || (u > 1))
{
return false;
}

oIntersection = seg1p1 + t * vseg1;

return true;
}

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment