| |
| 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: Punktliste (1518 mal gelesen)
|
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 19. Aug. 2011 09:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine Punktliste mit cons erstellt, die in etwa so aussieht: ((x y z)(x y z)...). Nun wollte ich alle y-Werte in eine neue Liste schreiben, um dann den Maximal- und den Minimal-Wert mit MIN bzw. MAX herauslesen zu können. Hierfür habe ich geschrieben (setq NeueListe (foreach n Liste (append NeueListe (car Liste)))) Leider ohne Erfolg. Ersetze ich append NeueListe durch princ, werden mir alle X-Werte säuberlich aufgelistet. So, daß ich glaube an der schreibweise kann es nicht liegen. Oder doch? Ich will, wie schon erwähnt die maximalen und minimalen Koordinatenwerte auslesen. Kann mir jemand auf die Sprünge helfen? ------------------ strukturiertes Zeichnen mit Werner-Maahs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 19. Aug. 2011 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 19. Aug. 2011 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
auf die schnell Code: (mapcar '(lambda (x) (car x) ) '((10 20 30)(10 20 30)(10 20 30)) ) (mapcar '(lambda (y) (cadr y) ) '((10 20 30)(10 20 30)(10 20 30)) )
(mapcar '(lambda (z) (caddr z) ) '((10 20 30)(10 20 30)(10 20 30)) )
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." 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: 19. Aug. 2011 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hallo, Ich denke der Grundaufbau ist bei dir nicht ganz richtig. Denn die Neueliste die du mit Append generieren willst bleibt immer leer da würde noch ein (setq NeueListe fehlen. So sollte es als Beispiel funktionieren. Code: (setq Liste '((1 2 3)(4 5 6)(7 8 9)(10 11 12)(13 14 15)(16 17 18))) (setq NeueListe nil)(setq NeueListe(foreach n Liste (setq NeueListe(append NeueListe (list(cadr n))))))
------------------ 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 |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 19. Aug. 2011 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
|
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 19. Aug. 2011 21:58 <-- editieren / zitieren --> Unities abgeben:
Danke für Eure Antworten! Ich habe einen halben Tag daran herumgedocktert und mich festgefahren. In der Zeit, wo ihr mir geantwortet habt, habe ich die Lösung (von Thomas /DADmium) mit mapcar im 'Kochbuch' gefunden. Es ist so etwas von ärgerlich, man sucht, probiert, sucht probiert und es will einfach nicht gelingen. Bin leider zu selten mit LISP beschäftigt um all diese Niedlichkeiten parat zu haben. Das mit append und cons hatte ich schon gelesen, aber germerkt habe ich keinen Zeitunterschied. In meiner Liste sind aber auch nur 37 Aufrufe und bei cons kommt noch das reverse hinzu. Danke noch einmal für Eure Antworten. Jetzt muss ich nur noch den größten und kleinsten Wert finden. Aber da gibt es hier mit zu schon einiges zu lesen. Liebe Grüße ------------------ strukturiertes Zeichnen mit Werner-Maahs
[Diese Nachricht wurde von Werner-Maahs.de am 19. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 20. Aug. 2011 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hallo Werner, für den größten und kleinsten Wert kannst Du VL-SORT verwenden, wenn Du das Beispiel von Dorfy nimmst wäre das dann zum Beispiel: Code:
(vl-sort (mapcar '(lambda (y) (cadr y) ) '((10 20 30)(10 20 30)(10 20 30))) '(lambda(e1 e2)(< e1 e2)))
Dann ist der erste Wert der Liste der kleinste Y-Wert.------------------ viele Grüße Jörn http://www.bosse-engineering.com 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: 20. Aug. 2011 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hallo Werner, so damit man das ganze auch mal testen und die Unterschiede auch live sehen kann, habe ich hier mal ein kleines Wettrennen veranstaltet. CONS gegen APPEND ! viel Spaß dabei
Code: (defun c:C-A-Test (Wiederholungen / Liste1 Zeit) ;;; ;;; (defun cons-Test (/) (repeat Wiederholungen (setq Liste1 (cons '(1.1 1.1 1.1) Liste1)) ) (setq Liste1 (reverse Liste1)) ) ;;; ;;; (defun append-Test (/) (repeat Wiederholungen (setq Liste1 (append '((1.1 1.1 1.1)) Liste1)) ) ) ;;; ;;; (princ "\nStart...\n") (foreach teil (list append-Test cons-Test) (setq Liste1 nil) (setq Zeit (getvar "DATE")) (princ "\n") (teil) (princ (list teil (car Liste1) (length Liste1) " " (rtos (* 86400 (- (getvar "date") Zeit)) 2 3) " Sek." ) ) ) (princ "\n\nTest ende!") (princ) )
------------------ 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 |
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 20. Aug. 2011 22:47 <-- editieren / zitieren --> Unities abgeben:
Für Eure Hilfe nochmals Danke an alle. Auch, wenn es für Euch sicherlich nur nebensächlich ist, hier der Dank Eurer Hilfe von mir gewählte Lösungsweg: Code: ... (setq y-sort (vl-sort (mapcar 'cadr pls) '< )) (command "ZOom" (list x-min (car y-sort)) (list x-max (last y-sort))) ...
Ich kann nicht sagen ob es technisch richtig ist, aber ich kann sagen, dass es wiederholt funktioniert hat. Liebe Grüße ------------------ strukturiertes Zeichnen mit Werner-Maahs Ach ja, Medlin, bald hätte ich es vergessen. Deinen Code habe ich aus reiner Vorsicht erst gar nicht ausprobiert. Habe befürchtet, dass er meinen Rechner lahm legen wird. Ist eh schon eine Krücke. Und - ich habe es ja verstanden - cons statt append Trotzdem Danke [Diese Nachricht wurde von Werner-Maahs.de am 20. Aug. 2011 editiert.] 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: 21. Aug. 2011 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hehe keine Sorge deinen Rechner wird es nicht lahmlegen. Kannst es ruhig mal mit nem 1000 Wert ausprobieren. Aber noch eins hierzu. Zitat: Ich kann nicht sagen ob es technisch richtig ist, aber ich kann sagen, dass es wiederholt funktioniert hat.
Ich frage mich jetzt nur wie du an deine Koordinaten kommst oder woher du sie erhälst ------------------ 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 |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 21. Aug. 2011 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Wenn die Koordinaten von AutoCAD Objekten atammen, dann wäre evt. Befehl: ZOOM Objekt zum Heranzoom oder oder für die Umringskoordinaten ein vla-getboundingbox besser gewesen. Aber wenn die Frage nur ein Fragment eines übergeordneten Problems ist, bekommt man nicht unbedingt die beste Lösung für das übergeordnete Problem, sondern nur für das Fragment. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de 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: 21. Aug. 2011 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Hi, ja genau da wollte ich ja auch mit meiner Frage hinzielen. Denn wenn es sich um Objektdaten handelt waren hier wohl alle hinweise hinfällig und man hätte das mit einem Einzeiler lösen können. ------------------ 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 |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 21. Aug. 2011 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
Zitat: Original erstellt von joern bosse: Hallo Werner, für den größten und kleinsten Wert kannst Du VL-SORT verwenden, wenn Du das Beispiel von Dorfy nimmst wäre das dann zum Beispiel:
Ja, man kann auch von hinten durch's Auge. Man kann aber auch MAX und MIN verwenden. Code:
(setq meineliste '((10 20 30)(10 20 30)(10 20 30))) ;; liefert kleinsten Y-Wert: (apply 'min (mapcar 'cadr meineliste))
[Diese Nachricht wurde von archtools am 21. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 Manchmal AC 2011
|
erstellt am: 21. Aug. 2011 20:42 <-- editieren / zitieren --> Unities abgeben:
Also, die Koordinaten kommen von einer Routine aus meinen WM-Tools (nur etwas für Einsteiger und leicht Fortgeschrittene). Dort gibt es ein Programm ich habe es yFx (Y als Funktion von X genannt). Die Routine zeichnet z.B. eine Sinus-Kurve oder ähnliches. Bisher ohne Punktliste und Zoom-Bereich. Als Beispiel, wie man eine Punktliste auswerten kann, habe ich die Objektgröße hiermit herausgefiltert und zum Zoomen auf das gezeichnete Objekt verwendet. Wird alles in Kürze auf meiner Web-Site zu lesen sein, natürlich mit einem Hinweis auf Eure Hilfe hier im CAD.de-Forum. Ich hoffe alle Fragen beantwortet zu haben. Nochmals Danke und liebe Grüße ------------------ strukturiertes Zeichnen mit Werner-Maahs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 22. Aug. 2011 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für Werner-Maahs.de
gibt ja schon gen+ügend Lösungen. Kurz zu Append Append verbindet 2 Listen miteinander. Du versuchst aber eine Liste nur mit einem Wert ((car Liste) ist jja nur der X-Wert)zu Appenden. Das geht nicht. Code: Befehl: (append (list 1 2 3 4 5) 6) ; Fehler: Fehlerhafter Argumenttyp: listp 6Befehl: (append (list 1 2 3 4 5) (list 6)) (1 2 3 4 5 6)
[Diese Nachricht wurde von fuchsi am 22. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |