| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: räumlicher Geradenschnitt (2535 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 28. Jun. 2012 14:34 <-- editieren / zitieren --> Unities abgeben:
Kann man einen Geradenschnitt im "Raum" berechnen. Die Punkte p1,p2,p3,p4 sind 3d-punkte. Wie könnte ich daraus einen Geradenschnitt rechnen bzw. was wäre wen die linien p1,p2 und p3,p4 sich nicht treffen kommt dann automatisch nil Code:
(if (not c:cal)(arxload "geomcal")) (if (setq obj (list (set 'ea (car (entsel "\nWähle 1. Höhe !"))) (set 'eb (car (entsel "\nWähle 2. Höhe !"))) (set 'ec (car (entsel "\nWähle 3. Höhe !"))) (set 'ed (car (entsel "\nWähle 4. Höhe !"))) )) (progn (setq pa (cdr (assoc 10 (entget ea))) p1 (list (nth 0 pa) (nth 1 pa) (atof (cdr (assoc 1 (entget ea))))) pb (cdr (assoc 10 (entget eb))) p2 (list (nth 0 pb) (nth 1 pb) (atof (cdr (assoc 1 (entget eb))))) pc (cdr (assoc 10 (entget ec))) p3 (list (nth 0 pc) (nth 1 pc) (atof (cdr (assoc 1 (entget ec))))) pd (cdr (assoc 10 (entget ed))) p4 (list (nth 0 pd) (nth 1 pd) (atof (cdr (assoc 1 (entget ed))))) ) (setq ps (cal "ill(p1,p2,p3,p4)")) ) )
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 28. Jun. 2012 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 28. Jun. 2012 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, die Funktion "inters" ermittelt auch 3D-Schnittpunkte, wenn alle übergebenen Punkte ebenfalls 3D sind. z.B.: Code: (inters '(0 0 0) '(1 1 1) '(3 0 0) '(3 1 1) nil) -> (3.0 3.0 3.0)
Grüsse, Henning------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Jun. 2012 08:19 <-- editieren / zitieren --> Unities abgeben:
@Henning: Was mir bei der Funktion inters aufgefallen ist, es werden immer nur dann Schnittpunkte ermittelt, wenn der Schnitt genau zwischen den 2 Linien liegt. Sobald er ausserhalb liegt kommt nil raus. @Marco: der code ist echt prima, damit ist mir sehr weitergeholfen Danke euch beiden. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 29. Jun. 2012 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Habe es nicht ganz verstanden aber um Schnittpunkte aus einer Punktliste auszulesen kannst du auch ssnamex verwenden. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Jun. 2012 09:35 <-- editieren / zitieren --> Unities abgeben:
Hintergrund meines Vorhabens, ich habe 4 Höhenpunkte vorgegeben, d.h. die jeweiligen Punktpaare p1,p2 und p3,p4 stellen ein bestimmtes Gefälle dar. Jetzt möchte ich gern den Schnittpunkt zw. p1,p2 und p3,p4 berechnen. Bisher habe ich das iterativ gelöst, also solange gerechnet bis der ermittelte Punkt p5 genau in der Flucht zw. p1,p2 und p3,p4 liegt. Das habe ich vor zu vereinfachen. Vielleicht hat aber eine einfachere Lösung als ich denke. Der angehängte File stellt die Situation dar, wie würdet ihr p5 ermitteln ? (mit int2.lsp geht es, es gibt aber Sonderfälle, wo selbst das Programm keine Lösung findet oder falsch rechnet ? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 29. Jun. 2012 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Was mir bei der Funktion inters aufgefallen ist, es werden immer nur dann Schnittpunkte ermittelt, wenn der Schnitt genau zwischen den 2 Linien liegt. Sobald er ausserhalb liegt kommt nil raus.
Daher noch das letzte Argument "NIL": Zitat: If the onseg argument is present and is nil, inters returns the point where the lines intersect, even if that point is off the end of one or both of the lines.
Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Jun. 2012 11:09 <-- editieren / zitieren --> Unities abgeben:
Verstehe ich nicht, wenn ich die Zeile (setq ps (inters p1 p2 p3 p4 nil)) eingebe kommt in meiner Beispiel dwg nil raus. Command: !p1 (2.00059 1.57095 46.13) Command: !p2 (2.91485 3.80573 47.58) Command: !p3 (3.69992 6.31862 48.56) Command: !p4 (4.082 7.28625 48.58) Command: (inters '(2.00059 1.57095 46.13) '(2.91485 3.80573 47.58) '(3.69992 6.31862 48.56) '(4.082 7.28625 48.58) nil) nil ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 29. Jun. 2012 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
na, dann sind die Linien nicht koplanar, und es gibt eben keinen Schnittpunkt! ... aber warscheinlich habe ich Dich - Dein Vorhaben - dann nur nicht verstanden. Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 29. Jun. 2012 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
es gibt keinen schnittpunkt. der geringste abstand zwischen den linien ist 0.21225 . abstandskoordinaten sind (3.5174 5.27859 48.5356) und (3.32 5.35644 48.5401) sowas solltest du aber mit geringem aufwand auch selber rauskriegen koennen. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Jun. 2012 14:08 <-- editieren / zitieren --> Unities abgeben:
Stimmt hast recht Marco, dein Link mit dem Programm fand eine Lösung, deshalb war ich zu oberflächlich mit der Annahme inters sollte auch eine Lösung finden. Dazu muss ich mich umso mehr mit dem code auseinandersetzen. Ist ganz schön ausgeklügelt. Damit sind meine Fragen auch erstmal beantwortet. Vielen Dank auch für Eure geopferte Zeit. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 29. Jun. 2012 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 05. Jul. 2012 14:52 <-- editieren / zitieren --> Unities abgeben:
|
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 05. Jul. 2012 15:11 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
die formel wird schon stimmen, aber die ist fuer linien in der ebene. du wolltest doch aber den schnittpunkt von 2 linien im raum. oder willst du eventuell den schnittpunkt von in die ebene projizierten linien? gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 10:11 <-- editieren / zitieren --> Unities abgeben:
Ja hab den Hacken gefunden, vielleicht erscheint es sinnlos, aber mal zum Testen meiner 3 versionen einen Geradenschnitt in der Ebene zu ermitteln. Code:
(defun punkte () (setq p1 (getpoint "\n1. Punkt ")) (setq p2 (getpoint "\n2. Punkt ")) (setq p3 (getpoint "\n3. Punkt ")) (setq p4 (getpoint "\n4. Punkt ")) )(defun c:v1 ( / d ys xs ps) (if (punkte) (progn (setq d (/ (float (- (* (- (nth 0 p4) (nth 0 p3)) (- (nth 1 p1) (nth 1 p4))) (* (- (nth 0 p1) (nth 0 p4)) (- (nth 1 p4) (nth 1 p3))))) (float (- (* (- (nth 0 p2) (nth 0 p1)) (- (nth 1 p4) (nth 1 p3))) (* (- (nth 0 p4) (nth 0 p3)) (- (nth 1 p2) (nth 1 p1))))) )) (setq ys (+ (* (- (nth 1 p2) (nth 1 p1)) d) (nth 1 p1))) (setq xs (+ (* (- (nth 0 p2) (nth 0 p1)) d) (nth 0 p1))) (setq ps (list xs ys)) (setvar "OSMODE" 0) (command "line" ps) ) ) (princ) ) (defun c:v2 ( / ps) (if (punkte) (progn (setq ps (inters p1 p2 p3 p4)) (setvar "OSMODE" 0) (command "line" ps) (princ) ) ) ) (defun c:v3 ( / ps) (if (punkte) (progn (if (not c:cal)(arxload "geomcal")) (setq ps (cal "ill (p1,p2,p3,p4) ")) (setvar "OSMODE" 0) (command "line" ps) (princ) ) ) )
Meine Aufgabe ist jetzt die Berechnung nicht in der Ebene x/y durchzuführen sondern in x/z. Da ich ja eine Höhe herausbekommen möchte, im Schnittpunkt von 2 Gefälle In der Ebene xy sollten doch die Punkte in einer Flucht sein. Sonst wird der Geradenschnitt in der x/z Ebene falsch berechnet ?! Wie kann ich es erreichen das mir hier eine Projektion errechnet wird ? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 10:31 <-- editieren / zitieren --> Unities abgeben:
Nochmal zur Verdeutlichung eine dwg, keine der hier genannten Funktionen hier ist in der Lage den Schnitt der 2 Geraden in der xz-ebene zu berechnen. Händisch geht es in dem ich die 2 Geraden auf die xz-ebene projeziere. Das möchte ich gern mit dem Lisp erreichen. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 06. Jul. 2012 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
ok, quiz zu "in eine ebene projizieren": welche werte verwende ich, wenn ich in die x/y-ebene projiziere? richtige antwort: x und y welche werte verwende ich demzufolge, wenn ich in die x/z-ebene projiziere? gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 11:20 <-- editieren / zitieren --> Unities abgeben:
Die Frage habe ich indirekt schon in meinem vorherigen Eintrag beantwortet. Ich kann ja jetzt nicht sturr die x- und die z-werte hernehemen. Sondern ich muss ein neues ucs festlegen in denen ich dann mit tranformierten x-werten und den gegebenen z-werten hantiere. Händisch mache ich ja nix anderes als das ich das ucs nach p1 -> p2 auszurichte und dann eine linie von p3 -> p4 ziehen und die mit der anderen verschneide. e´vola habe ich die z-koord vom gesuchten Schnittpunkt projeziert auf die Linie p1,p2 Mach ich was verkehrt oder versteht man mich nur nicht ? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 06. Jul. 2012 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo, dann stell doch einfach dein Händisch erstelles per LISP nach wenn du hier mir den Berechnungen nicht hin kommst. Einfach per Lisp 2 Konstrucktionslinen auf die Punkte legen lassen und schon spuckt Intersect den Schnittpunkt aus. Auch die linien wieder löschen lassen oder besser Undo benutzen. Fertig. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 06. Jul. 2012 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
du wirst immer andere pojizierte hoehen kriegen, je nachdem wie der winkel der ebene, welche lotrecht zur x/y-ebene steht, in der x/y-ebene ist. d.h. die projizierte hoehe in der x/z-ebene ist definitiv eine andere als in der y/z-ebene (bei allen anderen dazwischenliegenden ebenso). nur wenn es einen schnittpunkt im raum gibt, ist die hoehe identisch. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 15:13 <-- editieren / zitieren --> Unities abgeben:
Da stimme ich dir zwar überein, aber ich will ja kein Atomkraftwerk kontruieren, sondern lediglich Böschungen verschneiden. Also genügt mir eine vergeschlagene Lösung die mir bezüglich einer Linie den Schnittpunkt mit der anderen bringt. Ich bin darauf gestossen, dass ich ein ucs auch entmaken kann. Code:
(entmake (list '(0 . "UCS") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbUCSTableRecord") '(2 . "user2") '(70 . 0) (cons 10 (list 0 0 0)) (cons 11 (list 1.0 0.0 0.0)) ; xdirection) (cons 12 (list 0.0 1.0 0.0)) ; ydirection) '(79 . 3) ;Ansichtsoptionen '(146 . 0.0) ) );end of entmake
Mir ist klar, wie die koordinaten von GC 11 zustande kommen, jedoch von GC 12 steige ich nicht richtig dahinter Was müsste denn da stehen, wenn ich die Ansicht in y um 40Grad drehe ? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 15:45 <-- editieren / zitieren --> Unities abgeben:
definier ich es händisch und frage es anschliessen ab kommt (entget (tblobjname "ucs" "user")) ((-1 . <Entity name: 7ffffa2a170> ) (0 . "UCS") (330 . <Entity name: 7ffffa03870> ) (5 . "517F") (100 . "AcDbSymbolTableRecord") (100 . "AcDbUCSTableRecord") (2 . "user") (70 . 0) (10 369909.0 309639.0 0.0) (11 0.766044 0.642788 0.0) (12 0.0 0.0 1.0) (79 . 0) (146 . 0.0)) Allerdings wenn ich selbige Angaben zum entmake des user-ucs verwende klappts nicht ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 06. Jul. 2012 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hi, ich weis nicht wie ich das deuten soll Zitat: Also genügt mir eine vergeschlagene Lösung die mir bezüglich einer Linie den Schnittpunkt mit der anderen bringt
aber vielleicht hift es dir ersteinmal. Code: (setq p1 (getpoint "\n1. Punkt ")) (setq p2 (getpoint "\n2. Punkt ")) (setq p3 (getpoint "\n3. Punkt ")) (setq p4 (getpoint "\n4. Punkt ")) (command"_undo" "m") (setq osmode(getvar "osmode")) (setvar "osmode" 0) (command "_xline" p1 p2 "") (setq linie1(vlax-ename->vla-object(entlast))) (command "_xline" p3 p4 "") (setq linie2(vlax-ename->vla-object(entlast))) (setq SchnittPKT(vlax-invoke linie1 'IntersectWith linie2 acExtendNone)) (command"_undo" "r") (alert (vl-princ-to-string SchnittPKT))
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 06. Jul. 2012 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 06. Jul. 2012 16:04 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 07. Jul. 2012 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
So jetzt haben mich irgendwie die Überlegungen daran gepackt. Nur komme ich mit der Darstellung nicht klar darum wollte ich nochmal nachfragen. Bei deiner Angabe von Schnittpunkt in Achse XZ liegt der Punkt aus dieser Ansicht aber nicht auf dem Schnittpunkt der angegenenen Punkte. Ist hier die Angabe falsch oder verstehe ich es einfach nicht!?. Hier die Ergebnisse aus meinen Strahlen auch wenn Marco meint das diese hier nicht helfen. Ermittelte Anfangspunkte: pt1(211.091 113.014 12.5) pt2(212.787 115.072 12.56) pt3(213.96 116.54 12.73) pt4(215.336 118.585 12.98) Schnittpunkte: Ansicht von Oben Ergebniss XY = (213.798 116.298 12.5957) Ansicht von Links Ergebniss XZ = (212.87 115.172 12.5629) ------------------ Gruß Wolfgang
Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 07. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Jul. 2012 09:34 <-- editieren / zitieren --> Unities abgeben:
Ich bekomme für den Schnittpunkt das raus (212.958 115.28 12.566) Der ergibt sich aus der Ansicht des BKS bezogen auf die Linie p1,p2 mit 90Grad Drehung in der x-Achse (da ich ja in der xz-Ebene einen Geradenschnitt rechnen möchte). Es ist natürlich mathematisch nicht korrekt, dazu lieferte neurosis Funktion c:int2. Die mir aber nicht weiterhalf, da sie nur einen tatsächlichen Schnittpunkt berechnet, nicht eben einen projezierten Schnittpunkt. Das Programm ist nicht sonderlich schön geschrieben, liefert aber genau das was ich will. Die Kontrolle ergibt Gefälle von p1,p2 = 2.5% wie Gefälle p1,ps = 2.5% und Gefälle p3,p4 = 10% wie Gefälle ps,p3 = 10%. Ich betone es ist keine mathematisch korrekte Lösung, sondern nur eine Projektion, um zu erfahren wo sich etwa die Gefälle verschneiden (und ob sie sich verschneiden, wäre vielleicht noch sinnvoll einzubauen). Code:
(defun c:t () (setq os (getvar "OSMODE")) (setq p1 (getpoint "\n1. Punkt ")) (setq p2 (getpoint "\n2. Punkt ")) (setq p3 (getpoint "\n3. Punkt ")) (setq p4 (getpoint "\n4. Punkt ")) (progn (command "_ucs" "_z" p1 p2 "") (command "_ucs" "_x" "") (setq p1 (trans p1 0 1)) (setq p2 (trans p2 0 1)) (setq p3 (trans p3 0 1)) (setq p4 (trans p4 0 1)) ) (if (setq d (/ (float (- (* (- (nth 0 p4) (nth 0 p3)) (- (nth 1 p1) (nth 1 p4))) (* (- (nth 0 p1) (nth 0 p4)) (- (nth 1 p4) (nth 1 p3))))) (float (- (* (- (nth 0 p2) (nth 0 p1)) (- (nth 1 p4) (nth 1 p3))) (* (- (nth 0 p4) (nth 0 p3)) (- (nth 1 p2) (nth 1 p1))))) )) (progn (setq ys (+ (* (- (nth 1 p2) (nth 1 p1)) d) (nth 1 p1))) (setq xs (+ (* (- (nth 0 p2) (nth 0 p1)) d) (nth 0 p1))) (setq ps (list xs ys (nth 2 p1))) (setq ps (trans ps 1 0)) (setvar "OSMODE" 0) ) (princ) ) (command "_ucs" "") (command "line" ps) (setvar "OSMODE" os) )
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 09. Jul. 2012 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
fuer eine exakte berechnung benoetigt man 2 ebenen, die anhand der gefaellevektoren aufgespannt werden. wenn beide ebenen sich durchdringen, erhaelt man eine schnittlinie. mit dieser kann man fuer jeden beliebigen punkt(x,y) auf der linie die exakte hoehe ermitteln. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Jul. 2012 12:04 <-- editieren / zitieren --> Unities abgeben:
Verstehe ich dich richtig: du würdest eine Koordinatenberechnung im system z/x (p1,p2) und eine Berechnung im system z/x (p3,p4). Liegen die 2 ermittelten Schnittpunkte deckungsgleich um Weltkoordinatensystem, wäre der Geradenschnitt der 2 Vektoren exakt durch einen Punkt definiert. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 09. Jul. 2012 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
nein. fuer die exakte berechnung musst du dich von der geradenschnitt-berechnung verabschieden und mit den ebenen deiner boeschungen arbeiten. anhand der gefaellevektor p1p2 und p3p4 wird die lage der ebenen im raum ermittelt. durch verschneiden beider ebenen erhaelst du eine schnittlinie (genau da, wo sich beide ebenen durchdringen). die schnittlinie liegt ebenfalls irgendwie im raum. jetzt kannst du an jeder x-beliebigen stelle auf der schnittlinie die hoehe ermitteln. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |