| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Koordinatentranformation (1779 / mal gelesen)
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Okt. 2017 08:58 <-- editieren / zitieren --> Unities abgeben:
Ich habe 3 Punkte A,B,C im Raum und von ihnen die Koordinaten im WKS vorliegen. Diese Punkte spannen eine Ebene auf und können zur Definition eines neuen Koordinatensystems UCS herangezogen werden. Ursprung des neuen Koordinatensystem soll Punkt A werden, der X-Vektor der Vektor A-B, der Y-Vektor der rechtwinklig zu A-B zum Punkt C verlaufende Vektor. Anschließend möchte ich die WKS-Koordinaten von A, B, C in das neue Koordinatensystem transformieren. A hat dann '(0.0 0.0 0.0), B (?? 0.0 0.0) und C (?? ?? 0.0) Kann man die Funktion (trans PKT FROM TO) dafür verwenden ( für die Übergabe von Listen als Parameter FROM und TO hab ich nicht so wirklich was gefunden ) ? Ansonsten .. wie wäre das über eine Transformationsmatrix zu lösen? ( Mein Mathe ist da etwas eingerostet ) Ein entsprechendes BKS im Autocad erstellen und dann via (trans PKT 0 1) umrechnen will ich umgehen ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Okt. 2017 16:04 <-- editieren / zitieren --> Unities abgeben:
Also sowas (defun TRANSPKTLIST(PKTLIST / P1 P2 P3 ORG X Y OLDCMD RETURN) (if(and(=(type PKTLIST)'LIST) (setq PKTLIST(mapcar '(lambda(P) (if(and(=(type P)'LIST)(vl-every 'numberp P)) (setq P(cond ((= 2 (vl-list-length P))(list(car P)(cadr P) 0.0)) ((= 3 (vl-list-length P)) P) ) ) ) ) PKTLIST ) ) (vl-every 'vl-consp PKTLIST) (setq P1 (car PKTLIST) P2 (cadr PKTLIST) P3 (caddr PKTLIST)) (setq ORG (getvar "UCSORG") X (getvar "UCSXDIR") Y (getvar "UCSXDIR")) (not(equal 0.0 (distance '(0.0 0.0 0.0) X) 1e-300)) (setq X(mapcar'(lambda (A) (/ A (distance '(0.0 0.0 0.0) X)))X)) (setq YV1(list(cadr X)(*(car X)-1.0)(caddr X))YV2(mapcar '* YV1'(-1.0 -1.0 -1.0))) (if(<(abs(distance Y YV1))(abs(distance Y YV2)))(setq Y YV1)(setq Y YV2)) (setq OLDCMD (getvar "CMDECHO")) (setvar "CMDECHO" 0) (not(vl-catch-all-error-p(vl-catch-all-apply 'vl-cmdf(list "_ucs" "_w")))) (not(vl-catch-all-error-p(vl-catch-all-apply 'vl-cmdf(list "_ucs" "_n" "_3" P1 P2 P3)))) (setq RETURN(mapcar'(lambda(P)(trans P 0 1))PKTLIST)) (setq RETURN(mapcar'(lambda(P)(mapcar'(lambda(Z)(if(equal Z 0.0 1e-9) 0.0 Z))P))RETURN)) (not(vl-catch-all-error-p(vl-catch-all-apply 'vl-cmdf(list "_ucs" "_w")))) (not(vl-catch-all-error-p(vl-catch-all-apply 'vl-cmdf(list "_ucs" "_n" "_3" ORG X Y)))) (setvar "CMDECHO" OLDCMD) ) RETURN ) ) (TRANSPKTLIST'((917.799 405.015 -20.151)(943.421 455.961 -35.0277)(906.819 482.61 -49.7119))) ---> ((0.0 0.0 0.0) (58.9347 0.0 0.0) (69.7653 46.3487 0.0)) bloß halt ohne die Zwischenschritte des UCS-Setzens. Keiner ne Idee? ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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. Okt. 2017 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für CADmium
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 09. Okt. 2017 10:30 <-- editieren / zitieren --> Unities abgeben:
|
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 09. Okt. 2017 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für CADmium
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 09. Okt. 2017 16:28 <-- editieren / zitieren --> Unities abgeben:
|
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 09. Okt. 2017 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für CADmium
Hallo Thomas, es sollte möglich sein, für den Punkt C auch nacheinander Punkte aus einer Liste einzusetzen. Da ja alles eben ist, reichen die Polarkoordinaten in der BKS-XY-Ebene (Abstand von A und Winkel zu A->B) - sonst müsste man eventuell zu Kugel- oder Zylinderkoordinaten übergehen. Beste Grüße Jochen www.ant-ares.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Okt. 2017 13:50 <-- editieren / zitieren --> Unities abgeben:
|
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 12. Okt. 2017 10:16 <-- editieren / zitieren --> Unities abgeben: Nur für CADmium
Hoffentlich habe ich das nun richtig verstanden: Du hast 3 3D-Punkte A, B, C im WKS. Diese erzeugen ein BKS im Punkt A. In diesem BKS hast Du eine Punktmenge (2D im BKS, d. h. mit der Form xbks,ybks, 0). Gesucht sind deren Koordinaten im WKS. Wenn's denn so ist: Die 3 orthogonalen Einheitsvektoren des BKS in Weltkoordinaten erstellen - xebks,yebks, zebks. Punkt D im BKS mit xDbks,yDbks, zDbks=0 wird transformiert mit der Vektorgleichung: Dwks(vektor) = Awks(vektor) + (xDbks*xebks, yDbks*yebks, zDbks*zebkss=0)) Beste Grüße Jochen www.ant-ares.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |