• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Überprüfen Sie eine Gleichheit zwischen zwei Listenelementen

  • Ersteller Ersteller Dr.Lube
  • Erstellt am Erstellt am

Dr.Lube

Guest
Bye to all,
seltsamerweise kann ich keine Gleichheit zwischen zwei Listenelementen überprüfen, wahrscheinlich ist der Befehl falsch, wie ich versuchte gleich und =
Code:
(cond (equal pnt_a (nth 1 list_points))
(setq list_points (nth 1 list_points) (nth 2 list_points) (nth 3 list_points))
)
(gleich pnt_a (nth 2 list_points))
(setq list_points (nth 2 list_points) (nth 3 list_points) (nth 0 list_points) (nth 1 list_points))
)
(gleich pnt_a (nth 3 list_points))
(setq list_points (nth 3 list_points) (nth 0 list_points) (nth 1 list_points))
)
)
(7161.94 502.645) (7199.16 524.131) (7145.33 617.361) (7108.12 595.875)
und pnt_a = (7161.94 502.645)
gleich mi da sempre t, = Ich war schon immer

Wo ist der Fehler?

Danke, Dennis

ps. Ich weiß, dass ich das lösen kann, aber gibt es einen eleganteren Weg?
Code:
(cond ((und (= (nth 0 pnt_a) (nth 0 (nth 1 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 1 lista_punti)))))
(setq lista_punti (Liste nth 1 lista_punti) (nth 2 lista_punti) (nth 3 lista_punti) (nth 0 lista_punti)))
)
((und (= (nth 0 pnt_a) (nth 0 (nth 2 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 2 lista_punti)))))
(setq lista_punti (Liste (nth 2 lista_punti) (nth 3 lista_punti) (nth 0 lista_punti) (nth 1 lista_punti)))
)
((und (= (nth 0 pnt_a) (nth 0 (nth 3 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 3 lista_punti)))))
(setq lista_punti (Liste nth 3 lista_punti) (nth 0 lista_punti) (nth 1 lista_punti) (nth 2 lista_punti)))
)

)
 
das erste Element einer Liste hat Index 0 (Null) und nicht 1, also wenn Sie t aus dem ersten Ausdruck des Konds erhalten möchten, müssen Sie vergleichen
pnt_a mit (nth 0 list_points)
daher
Code:
...
(equal pnt_a (nth 0 list_points))
...
 
Ich weiß, aber das ist nicht das Problem.
die Bedingung (nth 0 list) Ich habe sie übersprungen, weil in diesem Fall die Punkte bereits richtig bestellt sind
 
(7161.94 502.645) (7199.16 524.131) (7145.33 617.361) (7108.12 595.875)
und pnt_a = (7161.94 502.645)
...
...
ps. Ich weiß, dass ich das lösen kann, aber gibt es einen eleganteren Weg?
Code:
(cond ((und (= (nth 0 pnt_a) (nth 0 (nth 1 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 1 lista_punti)))))
(setq lista_punti (Liste nth 1 lista_punti) (nth 2 lista_punti) (nth 3 lista_punti) (nth 0 lista_punti)))
)
((und (= (nth 0 pnt_a) (nth 0 (nth 2 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 2 lista_punti)))))
(setq lista_punti (Liste (nth 2 lista_punti) (nth 3 lista_punti) (nth 0 lista_punti) (nth 1 lista_punti)))
)
((und (= (nth 0 pnt_a) (nth 0 (nth 3 lista_punti)))) (= (nth 1 pnt_a) (nth 1 (nth 3 lista_punti)))))
(setq lista_punti (Liste nth 3 lista_punti) (nth 0 lista_punti) (nth 1 lista_punti) (nth 2 lista_punti)))
)

)
Ich verstehe nicht, was Sie bekommen müssen, mit den Werten, die Sie erklären, es gibt keine gültige cond.


p.s.
meiner Meinung nach mit dieser Syntax ist die Vergleichbarkeit des Codes nicht sofort, anstatt n Ich würde vorschlagen, Sie verwenden die Funktionen Auto, Cadmium, Cadmium, usw.http://www.jefferypsanders.com/autolispintr_list.html
http://www.afralisp.net/autolisp/tutorials/list-manipulation.php
 
ok im Beispiel der Punkt a ist nur der erste der Liste, so gab es keine Notwendigkeit, alles zu bestellen.. Ich habe praktisch einen Zyklus gemacht, der mir den tiefsten Punkt findet, ist ein Rechteck. zunächst einen zufälligen Punkt (der erste) dann auf y testen. Sobald ich den Punkt finde, den ich das Rechteck ausgehend von diesem Punkt mit einem Entmake rekonstruieren möchte, muss ich die Position dieses Punktes in der Liste finden und entsprechend bestellen. da die Punkte in der Liste sind 4 schienen intuitiver zu verwenden nth:)
 
Vergessen Sie Unternehmen und Unternehmen, können Sie diese verwenden:
Code:
(sublist (append (member pnt_a lista_punti) lista_punti) 0)

(defun sublist (lista start leng / n listaa)
(falls (> (+ Start leng) (Längenlistea))(setq leng (- (Längenlistea) Start)))
(setq n (+ start leng))
(Repeat leng)
(setq listaaa(cons (nth (setq n(1- n)) lista) listaa)))
)
)
gleich und = sind mit Ausnahme eines bestimmten: gleich können Sie einen Toleranzwert als optionales Argument einsetzen. bei extrapolierten Punkten unabdingbar
 
in guter Substanz müssen Sie daher den ersten Gipfel von Polylinea ändern.
versuchen Sie es so:
Code:
;position von Punkt mit ymin in Liste
(Sept.
(vl-Position)
(Auto (vl-sort list_points(lambda (a b)))))))
list_points
)
)

; kauft die Liste ab dem gefundenen Punkt
(setq list_points)
(Reverse)
(Repeat (Setq np (Längeliste_Punkte))
(falls (> n (1-np) (setq n 0))
(setq nl (cons (nth n list_points) nl))
(Setq n (1+ n))
Nein
)
)
)
Hinweis: Wenn mehrere Punkte mit dem gleichen ymin ausgewählt werden, wird der erste gefunden.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben