Aller au contenu

Donnez moi un triangle ! ou plusieurs ? mais est-ce le problème posé est juste ?


Messages recommandés

Donc suite à la conversation donnez moi un Z

On sait calculer le Z d'un point sur un triangle.

donc j'ai tracé "Arbitrairement" des triangles (face 3D) entre tout les points P pour faire un "semblant" de MNT... (voir image ci-dessous)

Mon programme lui s'en fou royalement, il va chercher les 3 points les plus proche pour générer le triangle..

et calculer le Z en fonction des 3 points les plus proches.

Le résultat est toujours juste et cohérent, mais je me demande si ma simulation est bonne ou non ?

 

Voici un exemple :Les Points P représentent les sommets de mes faces 3D

Et si je recherche le Z du point "TEST" (On se fout du résultat ici)

Mon programme simule un triangle en fonction des points relié en bleu avec le Point TEST

Le Z résultant est t'il viable même si mon point est en dehors des limites du triangle sur lequel il se base ?

En espérant avoir été assez clair... 😀

 

1045716487_Sanstitre.png.871c2df9aa5f912d28a8d01010c8452f.png

 

 

 

Lien à poster
Partager sur d’autres sites

Bonjour
La réponse, mais tu t'en doutais un peu, est NON.
Si tu as un maillage comme on le voit sur ta copie d'écran, tu dois d'abord rechercher dans quel triangle du maillage tu te trouves puis utiliser les 3 points de ce triangle pour calculer l'altitude.
Si tu ne fais pas cela, bien sûr tu obtiendras une altitude mais elle pourrait être complètement fausse surtout si le terrain est accidenté.

Cordialement

Lien à poster
Partager sur d’autres sites

Une petite illustration avec deux épures de géométrie descriptive.

Sur l'épure de gauche le point p est projeté sur la face (a, b, d), sur l'épure de droite il est projeté sur la face (a, b, c).
image.thumb.png.212b50e2396908ae27c7ea1f09836d52.png

 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien à poster
Partager sur d’autres sites

@tiphon

Quote

Si tu as un maillage comme on le voit sur ta copie d'écran, tu dois d'abord rechercher dans quel triangle du maillage tu te trouves puis utiliser les 3 points de ce triangle pour calculer l'altitude.
Si tu ne fais pas cela, bien sûr tu obtiendras une altitude mais elle pourrait être complètement fausse surtout si le terrain est accidenté.

Oui mais le maillage : je l'ai tracé arbitrairement !

 

2 hours ago, (gile) said:

Une petite illustration avec deux épures de géométrie descriptive.

Sur l'épure de gauche le point p est projeté sur la face (a, b, d), sur l'épure de droite il est projeté sur la face (a, b, c).
image.thumb.png.212b50e2396908ae27c7ea1f09836d52.png

 

oui c'est bien ce qui me semblait ...

donc il faut que je vérifie si mon point est bien a l'intérieur du triangle pour être sur que je puisse faire le calcul du Z !

sur 3 point je vais savoir le faire ! Merci à vous de m'avoir éclairer !

 

EDIT mais du coup quels sont les "vrais" points des triangles

Pour 4 points, je vais avoir 2 solutions de tracage ?

Lien à poster
Partager sur d’autres sites

Bonjour @Curlygoth

Pour calculer l'altitude "exacte" du point il faut bien évidemment vérifier à la verticale de quelle face il se situe.
C'est ce qui se passe dans 99 % des cas lorsqu'on parle de MNT (Modèle Numérique de Terrain) (TIN en anglais)
Le pourcent qui reste est dans le cas de fortes pentes (genre falaise ou flanc de montagne pour appui de barrage) c'est très rare.

Je ne pense pas que tu aies besoin d'aide pour ce faire, si ?

Par contre, c'est le côté "arbitraire" du dessin des faces qui m'inquiète, un MNT (bien réalisé) n'a rien d'arbitraire !

Tu trouveras des explications avec les travaux des mathématiciens Russes, Delaunay et Voronoï ce qui rendra caduque ta phrase :
Pour 4 points, je vais avoir 2 solutions de traçage ?

Amicalement

 

 

Lien à poster
Partager sur d’autres sites
Quote

Pour calculer l'altitude "exacte" du point il faut bien évidemment vérifier à la verticale de quelle face il se situe.

on est d'accord 😉

 

Quote

 

C'est ce qui se passe dans 99 % des cas lorsqu'on parle de MNT (Modèle Numérique de Terrain) (TIN en anglais)
Le pourcent qui reste est dans le cas de fortes pentes (genre falaise ou flanc de montagne pour appui de barrage) c'est très rare.

Je ne pense pas que tu aies besoin d'aide pour ce faire, si ?

 

ça va aller en effet 😉
 

Quote

 

Par contre, c'est le côté "arbitraire" du dessin des faces qui m'inquiète, un MNT (bien réalisé) n'a rien d'arbitraire !

Tu trouveras des explications avec les travaux des mathématiciens Russes, Delaunay et Voronoï ce qui rendra caduque ta phrase :

Pour 4 points, je vais avoir 2 solutions de traçage ?

 

Merci Didier !

et bien voila c'est parfait !

https://fr.wikipedia.org/wiki/Triangulation_de_Delaunay#En_dimension_quelconque

au boulot maintennant !

D'après la définition de Delaunay1, le cercle circonscrit d'un triangle constitué de trois points de l'ensemble de départ est vide s'il ne contient pas d'autres sommets que les siens.

ok, ben c'est parti !!!

Lien à poster
Partager sur d’autres sites
39 minutes ago, Curlygoth said:

D'après la définition de Delaunay1, le cercle circonscrit d'un triangle constitué de trois points de l'ensemble de départ est vide s'il ne contient pas d'autres sommets que les siens.

Autrement dit : pour le quadrilatère projeté horizontalement, on choisi la diagonale la plus courte (b, d) :image.png.324d5273eabf062df19453283fe51da1.png. 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien à poster
Partager sur d’autres sites

WOW !

Donc si je comprends bien : (ce que j'essaie de faire) tu l'as déjà fait !

Ben félicitation à toi déjà !

(je continue en MP avec toi) libre a toi de me dre si je dois publier mes messages ici mais j'ai peur de faire du hors sujet
 

 

Lien à poster
Partager sur d’autres sites

Bonjour @Curlygoth

Je pense que si tu t'arrêtes à ce qui existe déjà en AutoLisp/VisualLisp tu ne vas pas avoir beaucoup de travail !

J'en reviens à ton message initial, tu parles de calculer l'altitude d'un point en fonction de sa position à la verticale d'une face 3D, c'est une chose,
mais tu as dérivé (ou nous t'avons fait dériver) vers les MNT et donc la nouvelle question serait donc : Comment dessiner un MNT (en VBA) ?

C'est ça ?
Je vais suivre ce post en espérant qu'il n'y ait pas trop de MP pour arriver à la solution, c'est pas trop le principe du forum, on aime savoir, on aime apprendre, on aime partager.

Amicalement

Lien à poster
Partager sur d’autres sites
Quote

et donc la nouvelle question serait donc : Comment dessiner un MNT (en VBA) ?

Grâce a la page que j'ai mis, les indications de (gile)

Je pense pouvoir y arriver

Pour les curieux : voici un extrait de mon MP pas très intéressant mais qui a le mérite d'être concerné par le topic actuel :

Quote

(Je vais quand même me creuser la tête pou le faire en VBA ^^' )

pour être franc avec toi je vais pas "créer" de MNT.

Je veux que mon programme créé ces propres triangles dans la "zone" ou je veux avoir le Z.

sans forcement les tracés.

Alors oui, il calculera surement 10 fois les même choses si on les z dans une zone restreinte...

mais se sera toujours mieux que mon systeme actuel ^^.

A savoir que je ne travaille pas avec plus 1700 points donc ça devrait aller ^^

 

Phase du programme :

1) J'ai le point à rechercher [FAIT]

2) je boucle/Filtre les points les plus proche de mon point [FAIT]

3) je fais une fonction pour definir un "MNT" que je ne trace pas avec les points proches

(via ton information : https://fr.wikipedia.org/wiki/Triangulation_de_Delaunay#En_dimension_quelconque) et je n'ai pas encore démarré cette partie

4) je "sélectionne"/recherche le triangle dans lequel le point appartient [EN COURS]

5) Je calculs via le forum donne un Z. [FAIT]

Lien à poster
Partager sur d’autres sites

Bonjour
Je m'inquiète un peu de ce que tu vas faire des altitudes obtenues et de l'origine des points d'altitude que tu as en données d'entrée...
Le message de Didier :

Quote

Pour calculer l'altitude "exacte" du point il faut bien évidemment vérifier à la verticale de quelle face il se situe.
C'est ce qui se passe dans 99 % des cas lorsqu'on parle de MNT (Modèle Numérique de Terrain) (TIN en anglais)
Le pourcent qui reste est dans le cas de fortes pentes (genre falaise ou flanc de montagne pour appui de barrage) c'est très rare.

peut laisser penser qu'une simple triangulation avec la méthode Delaunay (que tu feras en temps réel si j'ai bien compris) va te permettre de calculer correctement une altitude en n'importe quel point à condition que tu ne sois pas dans une zone de forte pente...

Et bien non, ce n'est pas tout à fait vrai.

Si tes points correspondent à un levé d'un terrain 'irrégulier', tu vas très vite rencontrer des problèmes altimétriques. Quand je parle de terrain 'irrégulier', je pense en particulier à tout levé dans une zone urbaine, artificialisée. Et là on n'est plus dans l'ordre des 1% des levés qui contiennent des 'cassures' dans le relief (talus, fossés, bordure de trottoir, dévers d'une route....). Dans ces zones de cassures tu risques d'avoir de réels problèmes altimétriques. Imagine que le terrain soit une carrière, tu pourrais te retrouver avec des écarts de plusieurs mètres en altitude dans la zone du front de taille...

Tout dépend bien sûr de ce à quoi va servir ton programme, du genre de lever que tu vas traiter. Il faut juste connaitre les limites d'utilisation du programme que tu veux faire et surtout que les utilisateurs les connaissent eux aussi.

 

Cordialement

Lien à poster
Partager sur d’autres sites

Bonjour @tiphon

Je te rejoins sur ce commentaire, c'est pour cette raison que les MNT bien faits prennent en compte des lignes de rupture, essentielles à mes yeux.

Patientons jusqu'à la livraison de @Curlygoth...

Amicalement

Lien à poster
Partager sur d’autres sites
Quote

OK, je vais suivre ce post, en guettant cette solution.

Je répondrais au quickhull (qui accepte tous les languages) et d'ailleurs : je l'ai pas encore commencé...

(et donc par la même occasion tenir mes propres engagements par exemple...😅)

Ici, on est dans la simulation, donc je compte utiliser la méthodes que TU m'as donné tout comme la formule que TU m'a donné aussi dans le topic "donnez moi un Z"

C'est une formule que je penses : tu peux mettre sous tout les languages. (et c'est ce que je préfère comme ça je pourrais l'adapter plus tard)

Et oui je fais du VBA car je trouves ça facile.

Mais comme tu as pu le constaté : il me manque énormément de connaissance (notamment les produits scalaires et vectoriel par exemple) et que j'ai adapté sans effectivement la comprendre..

Mais je ne m’arrête pas là !

J'ai des difficultés ? et bien, il a des cours des lignes ! des pages wikipédia... et tout pour m'instruire sur des notions que je ne connais(sais) pas

J'apprends grâce à vous et  je vous en remercie !

Quote

Je ne pense pas que tu aies besoin d'aide pour ce faire, si ?

donc ce message que tu m'as laissé...

et bien si comme tu as pu le voir. j'ai besoin de m'instruire car du haut (ou du bas) de mon jeune âge, je n'ai pas toutes vos connaissances.

et crois moi je compte bien me tromper des mes exercices par moment et les corrigés pour progresser.

comme finalement je suis content d'avoir poster ce topic car il m'instruit grâce à vous.

@tiphonJe fais ça pour m'amuser et m'instruire

et oui c'est parfois des rues ou autres mais je suis à 10cm prêt dans mes projets... pas au millimètre ^^

et j'imagine juste les possibilités :

Calcul volumétrique à terrasser pour batiment

Calcul de volume talus en place (au m3 pret histoire d'avoir une marge et une fourchette)

Profil en long (que je fais déjà avec calcul d'un Z d'un point quelconque entre 2 points) donc la je serais plus précis

Simulation d'un Z au milieu d'un nuage de point (type : rue : route : champ) pour les bordures on a qu'a prendre un point fil d'eau et un point sur la bordure

Analyser un nuage de points pris en photogrammétrie... (j'en suis pas la c'est des idées pour le futur)

Aujourd'hui c'est pas un besoin c'est juste de la curiosité

 

EDIT

Quote

Je te rejoins sur ce commentaire, c'est pour cette raison que les MNT bien faits prennent en compte des lignes de rupture, essentielles à mes yeux.

a ben on verra si j'y arrive aussi XD

Lien à poster
Partager sur d’autres sites

Bonjour @Curlygoth

J'ai regardé le lien que tu as fourni et je reste sur ma faim, ou alors tu t'es trompé de lien, car je ne vois pas ce que le mémoire de fin d'études de ce brave géomètre Malgache apporte comme valeur ajoutée dans la question posée, pas de code, pas de solution...
On a l'habitude de montrer nos travaux qui permettent à tout le monde de progresser.
La question est intéressante et je ne dois pas être le seul à la suivre...

Amicalement

Lien à poster
Partager sur d’autres sites

alors sache qu'au pire j'écris le code quand je peux j'avance pas assez vite... mais j'avance petit à petit, j’espère clôturer mon quickhull

(au début adapter pour 4 pts mais je vise un peux plus pour le challenge)

un extrait pour ta patience ?

Je suis en train d'écrire le QuickHull (en fin de code)

 

'''PARTIE FONCTION MATH
Function Hypothenuse(DX, DY)
    Hypothenuse = Sqr(DX * DX + DY * DY)
End Function
Function PI()
    PI = 4 * Atn(1)
End Function
Function MATH_AX_B_2PTS(Pt1, PT2)
'Ax+B
Dim c(0 To 1) As Double
c(0) = (PT2(1) - Pt1(1)) / (PT2(0) - Pt1(0)) 'A
c(1) = PT2(1) - c(0) * PT2(0) 'B
MATH_AX_B_2PTS = c
End Function
Function MATH_DISTANCE_PT_DROITE(a, b, PT)
NUMERATEUR = Abs(a * PT(0) - PT(1) + b)
DENOM = Sqr((a ^ 2 + 1))
MATH_DISTANCE_PT_DROITE = NUMERATEUR / DENOM
End Function
Function MATH_AX_B_PERPENDICULAIRE(a, b, PT)
Dim c(0 To 1) As Double
c(0) = 1 / (-a)
c(1) = PT(1) - a * PT(0)
MATH_AX_B_PERPENDICULAIRE = c
End Function
Function MATH_PT_INTERSECTION_2_DROITE(A1, B1, A2, B2)
Dim c(0 To 1) As Double
X = (B2 - B1) / (A1 - A2)
Y = A1 * X + B1
c(0) = X
c(1) = Y
MATH_PT_INTERSECTION_2_DROITE = c
End Function
Function MATH_ALTI_POINT_TRIANGLE(PA, PB, PC, Pm)
Vab = VECTEUR(PA, PB)
Vac = VECTEUR(PA, PC)
VN = PROD_VECTEUR(Vab, Vac)
MATH_ALTI_POINT_TRIANGLE = Z_VECTEUR_NORMAL_Pa(PA, Pm, VN)
End Function
Function VECTEUR(PA, PB)
Dim V(0 To 2) As Double
For i = 0 To 2
    V(i) = PB(i) - PA(i) 'Vecteur ab
Next i
VECTEUR = V
End Function
Function PROD_VECTEUR(Vab, Vac)
Dim V(0 To 2) As Double
V(0) = Vab(1) * Vac(2) - Vab(2) * Vac(1)
V(1) = Vab(2) * Vac(0) - Vab(0) * Vac(2)
V(2) = Vab(0) * Vac(1) - Vab(1) * Vac(0)
PROD_VECTEUR = V
End Function
Function Z_VECTEUR_NORMAL_Pa(PA, Pm, VN)
T1 = PA(0) * VN(0) + PA(1) * VN(1)
T2 = PA(2) * VN(2)
T3 = Pm(0) * VN(0)
T4 = Pm(1) * VN(1)
Z_VECTEUR_NORMAL_Pa = (T1 + T2 - T3 - T4) / VN(2)
'z4 = (x1*xn + y1*yn + z1*zn – x4*xn – y4*yn) / zn
End Function
Function DotProduct(v1 As Variant, v2 As Variant) As Double 'Produit scalaire par (gile)
    DotProduct = v1(0) * v2(0) + v1(1) * v2(1) + v1(2) * v2(2)
End Function
Function POINT_ON_POLY(PolyLigne, Pt1)
Dim NbrePoints As Integer
Dim Pt1(0 To 2) As Double
Dim PT2(0 To 2) As Double
Dim Ray As AcadRay
Dim Points As Variant
          PT2(0) = Pt1(0) + 1
          PT2(1) = Pt1(1)
          PT2(2) = Pt1(2)
          Set Ray = ThisDrawing.ModelSpace.AddRay(Pt1, PT2)
          ' Calcul du nombre de points d'intersection
          Points = PolyLigne.IntersectWith(Ray, acExtendNone)
          NbrePoints = UBound(Points) / 3
          ' Détermination en fonction de la parité
          If NbrePoints Mod 2 = 0 Then
          'MsgBox "Le point n'est pas dans le contour"
            POINT_ON_POLY = True
          Else
          'MsgBox "Le point est dans le contour"
            POINT_ON_POLY = True
          End If
          Ray.Delete
End Function
Function PT_AU_DESSUS_DROITE(a, b, PT)
    Y = PT(0) * a + b
        If Y >= PT(1) Then
            PT_AU_DESSUS_DROITE = False
        Else
            PT_AU_DESSUS_DROITE = True
        End If
End Function
Function AJ_POINT_PO(plineObj, Num_vertex, PT)
    Dim newVertex(0 To 1) As Double
    newVertex(0) = PT(0)
    newVertex(1) = PT(1)
    plineObj.AddVertex Nun_vertex, newVertex
    plineObj.Closed = True
    AJ_POINT_PO = Num_vertex
End Function
Function POINT_SOMMET_POLY(Poly, PT)
Dim PT_PO(0 To 1) As Double
POINT_SOMMET_POLY = False
d_D = 0.0001
COORD = Poly.Coordinates
For j = 0 To UBound(COORD) Step 2
    D_X = PT_PO(j) - PT(0)
    D_Y = PT_PO(j + 1) - PT(1)
    If FONCT.Hypothenuse(D_X, D_Y) < d_D Then
        POINT_SOMMET_POLY = True
        Exit Function
    Else
    End If
Next j
End Function
Function POINT_D_MAX(Poly, LIST_POINT, NB_POINT, AX_B_, AU_DESSUS)
'Sous la forme L_POINT(XYZ, X) X nombre de points,XYZ min = 1
D_MAX = 0
For POINT = 0 To NB_POINT
    P_T(0) = LIST_POINT(0, POINT)
    P_T(1) = LIST_POINT(1, POINT)
    
    If POINT_SOMMET_POLY(Poly, P_T) = False Then
        If AU_DESSUS = PT_AU_DESSUS_DROITE(AX_B_(0), AX_B_(1), P_T) Then
            If D = "" Then
                D_MAX = FONCT.MATH_DISTANCE_PT_DROITE(AX_B_(0), AX_B_(1), P_T)
                D = FONCT.MATH_DISTANCE_PT_DROITE(AX_B_(0), AX_B_(1), P_T)
                POINT_D_MAX = P_T(0) & ";" & P_T(1)
            Else
                D = FONCT.MATH_DISTANCE_PT_DROITE(AX_B_(0), AX_B_(1), P_T)
                If D > D_MAX Then
                    POINT_D_MAX = P_T(0) & ";" & P_T(1)
                Else
                End If
            
            End If
        Else
        End If
    Else
    End If
Next POINT
End Function
Function RECH_DES_4_POINTS_LES_PLUS_PROCHES(Pp1, NOM_BLOC)
Dim TABL(4, 3) As Variant
Dim temp As Long
Dim blockRefObj As AcadBlockReference
X = 0
Y = 1
Z = 2
D = 3

temp = -1
For ent = 0 To ThisDrawing.ModelSpace.Count - 1
Set entity = ThisDrawing.ModelSpace.Item(ent)
    If entity.ObjectName = "AcDbBlockReference" Then
        Set blockRefObj = entity
        If blockRefObj.EffectiveName = NOM_BLOC Then  '"PTTOPO"

            'DIST = FONCT.Hypothenuse(blockRefObj.InsertionPoint(X) - Pp1(X), blockRefObj.InsertionPoint(Y) - Pp1(Y))
            
            D_X = blockRefObj.InsertionPoint(X) - Pp1(X)
            D_Y = blockRefObj.InsertionPoint(Y) - Pp1(Y)
            
            DIST = FONCT.Hypothenuse(blockRefObj.InsertionPoint(X) - Pp1(X), blockRefObj.InsertionPoint(Y) - Pp1(Y))
            temp = temp + 1
            If temp <= 4 Then
            Else
                temp = 4
            End If
                For i = X To Z
                    TABL(temp, i) = blockRefObj.InsertionPoint(i)
                Next i
                    TABL(temp, D) = DIST
            Call Tri_2D(TABL, 0, temp, 3)
        Else
        End If
    Else
    End If
Next ent

RECH_DES_4_POINTS_LES_PLUS_PROCHES = TABL

End Function

Function CALCUL_Z_DANS_TRIANGLE_Z(Pa2D, Pb2D, Pc2D)
Pa2D(2) = 0
Pb2D(2) = 0
Pc2D(2) = 0
Vab = FONCT.VECTEUR(Pa2D, Pb2D)
Vac = FONCT.VECTEUR(Pa2D, Pc2D)
Vam = FONCT.VECTEUR(Pa2D, M)
Vba_ = FONCT.VECTEUR(Pb2D, Pa2D)
Vbc = FONCT.VECTEUR(Pb2D, Pc2D)
Vbm = FONCT.VECTEUR(Pb2D, M)
Vca = FONCT.VECTEUR(Pc2D, Pa2D)
Vcm = FONCT.VECTEUR(Pc2D, M)
PV1_1 = FONCT.PROD_VECTEUR(Vab, Vam)
PV1_2 = FONCT.PROD_VECTEUR(Vam, Vac)
PV2_1 = FONCT.PROD_VECTEUR(Vba_, Vbm)
PV2_2 = FONCT.PROD_VECTEUR(Vbm, Vbc)
PV3_1 = FONCT.PROD_VECTEUR(Vca, Vcm)
PV3_2 = FONCT.PROD_VECTEUR(Vcm, Vcm)
PROD_SCAL_1 = FONCT.DotProduct(PV1_1, PV1_2)
PROD_SCAL_2 = FONCT.DotProduct(PV2_1, PV2_2)
PROD_SCAL_3 = FONCT.DotProduct(PV3_1, PV3_2)
If PROD_SCAL_1 >= 0 And PROD_SCAL_2 >= 0 And PROD_SCAL_2 >= 0 Then
    Z = FONCT.MATH_ALTI_POINT_TRIANGLE(Pt1, PT2, pt3, P)
    pr(0) = P(0)
    pr(1) = P(1)
    pr(2) = Z
Else
End If
End Function
''''''''''''''''''''''''''''''''
''''TRI A BULLE PAS DE MOI !!!!
''''''''''''''''''''''''''''''''''
Public Sub Tri_2D(ByRef Tableau As Variant, _
                               mini As Long, _
                               Maxi As Long, _
                               Optional Colonne As Long = 0)
    Dim i As Long, j As Long, Pivot As Variant, TableauTemp As Variant, ColTemp As Long
        On Error Resume Next
        i = mini: j = Maxi
        Pivot = Tableau((mini + Maxi) \ 2, Colonne)
        While i <= j
            While Tableau(i, Colonne) < Pivot And i < Maxi: i = i + 1: Wend
            While Pivot < Tableau(j, Colonne) And j > mini: j = j - 1: Wend
            If i <= j Then
                ReDim TableauTemp(LBound(Tableau, 2) To UBound(Tableau, 2))
                For ColTemp = LBound(Tableau, 2) To UBound(Tableau, 2)
                    TableauTemp(ColTemp) = Tableau(i, ColTemp)
                    Tableau(i, ColTemp) = Tableau(j, ColTemp)
                    Tableau(j, ColTemp) = TableauTemp(ColTemp)
                Next ColTemp
                Erase TableauTemp
                i = i + 1: j = j - 1
            End If
        Wend
        If (mini < j) Then Call Tri_2D(Tableau, mini, j, Colonne)
        If (i < Maxi) Then Call Tri_2D(Tableau, i, Maxi, Colonne)
End Sub

      
'''''''''''''CODE EN COURS d'ECRITURE !!!!!!

Function QUICKHULL(L_POINT, NB_POINT)
'Sous la forme L_POOINT(XYZ, X) X nombre de points,XYZ min = 1
L_bound = 0
U_BOUND = NB_POINT
'Recherche des points extremes gauche et point droit
Dim AX_B()
Dim PT_GAUCHE(0 To 1) As Double
Dim PT_DROIT(0 To 1) As Double

Dim POLYPOINT(0 To 3) As Double

For i = L_bound To U_BOUND
    If i = 0 Then
        PT_GAUCHE(0) = L_POINT(0, i)
        PT_GAUCHE(1) = L_POINT(1, i)
        PT_DROIT(0) = L_POINT(0, i)
        PT_DROIT(1) = L_POINT(1, i)
    Else
        If L_POINT(0, i) < PT_GAUCHE(0) Then
            PT_GAUCHE(0) = L_POINT(0, i)
            PT_GAUCHE(1) = L_POINT(1, i)
        Else
        End If
        If L_POINT(0, i) > PT_DROIT(0) Then
            PT_DROIT(0) = L_POINT(0, i)
            PT_DROIT(1) = L_POINT(1, i)
        Else
        End If
    End If
Next i
POLYPOINT(0) = PT_DROIT(0)
POLYPOINT(1) = PT_DROIT(1)
POLYPOINT(2) = PT_GAUCHE(0)
POLYPOINT(3) = PT_GAUCHE(1)
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(POLYPOINT)
AX_B_0 = FONCT.MATH_AX_B_2PTS(PT_GAUCHE, PT_DROIT)
ReDim Preserve AX_B(0)
AX_B(0) = AX_B_0


Dim PT_TEMP(0 To 2)
'Point au dessus
PT_DESSUS = True

dr = 0

For i = L_bound To U_BOUND

        PT_TEMP(0) = L_POINT(0, i)
        PT_TEMP(1) = L_POINT(1, i)

        If POINT_SOMMET_POLY(plineObj, PT_TEMP) = False Then
        
            D = FONCT.MATH_DISTANCE_PT_DROITE(AX_B(dr)(0), AX_B(dr)(1), PT_TEMP)
            
                If PT_AU_DESSUS_DROITE(AX_B(0), AX_B(1), PT_TEMP) = PT_DESSUS Then
                    Nb_vertex = AJ_POINT_PO(plineObj, 1, PT_TEMP) + 1
                Else
                End If
        Else
        End If

Next i
End Function

Merci de ne pas porter de jugement !!!!

C'est V0.0 XD donc même pas fini XD

Je vais ajouter un point a ma polyligne ensuite vérifier les points encore au dessus des 2 segments créés !

D'ailleurs peut etre gérer par rapport a la polyligne plutot qu'aux points d'ailleurs....

bon ben je vais modifier ça XD

Lien à poster
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...