Curlygoth Posté(e) le 3 juin 2021 Posté(e) le 3 juin 2021 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... 😀 Mon site Web (en cours de construction) : Site DA-CODE de @didier
tiphon Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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
(gile) Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Curlygoth Posté(e) le 4 juin 2021 Auteur Posté(e) le 4 juin 2021 @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). 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 ? Mon site Web (en cours de construction) : Site DA-CODE de @didier
didier Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Curlygoth Posté(e) le 4 juin 2021 Auteur Posté(e) le 4 juin 2021 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 !!! Mon site Web (en cours de construction) : Site DA-CODE de @didier
(gile) Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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) :. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 PS : pour la création de MNT avec AutoCAD, voir ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Curlygoth Posté(e) le 4 juin 2021 Auteur Posté(e) le 4 juin 2021 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 Mon site Web (en cours de construction) : Site DA-CODE de @didier
didier Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Curlygoth Posté(e) le 4 juin 2021 Auteur Posté(e) le 4 juin 2021 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] Mon site Web (en cours de construction) : Site DA-CODE de @didier
didier Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 Bonjour @Curlygoth OK, je vais suivre ce post, en guettant cette solution. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
tiphon Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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
didier Posté(e) le 4 juin 2021 Posté(e) le 4 juin 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Curlygoth Posté(e) le 4 juin 2021 Auteur Posté(e) le 4 juin 2021 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 Mon site Web (en cours de construction) : Site DA-CODE de @didier
Curlygoth Posté(e) le 7 juin 2021 Auteur Posté(e) le 7 juin 2021 Pour ceux qu'il ne veulent pas se casser la tête solution déjà faite via ce lien : http://biblio.univ-antananarivo.mg/pdfs/andrianjatoHerilazaS_ESPA_MAST_15.pdf Mon site Web (en cours de construction) : Site DA-CODE de @didier
didier Posté(e) le 7 juin 2021 Posté(e) le 7 juin 2021 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Curlygoth Posté(e) le 8 juin 2021 Auteur Posté(e) le 8 juin 2021 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 Mon site Web (en cours de construction) : Site DA-CODE de @didier
didier Posté(e) le 8 juin 2021 Posté(e) le 8 juin 2021 Hello @Curlygoth Ah ben oui, ça travaille (hihi)... bon courage pour la finalisation. De mon côté, je fais pas mal de tests avec les faces 3D, je compilerai le tout quand ce sera opérationnel. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Curlygoth Posté(e) le 8 juin 2021 Auteur Posté(e) le 8 juin 2021 si tu as besoin n'hésite pas 😉 Mon site Web (en cours de construction) : Site DA-CODE de @didier
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant