ein Macro könnte das einfacher zum schreiben machen.
Code: Alles auswählen
Macro SetMax(_a_,_max_)
If _a_\x < _max_\left : _max_\left = _a_\x : ElseIf _a_\x > _max_\right : _max_\right = _a_\x : EndIf
If _a_\y < _max_\top : _max_\top = _a_\y : ElseIf _a_\y > _max_\bottom : _max_\bottom = _a_\y : EndIf
Endmacro
; Beim ersten mal nicht das Macro setzen, sondern direkt die werte! Der Punkt ist ja aktuell der kleinste *UND* größte Punkt!
max\left = a\x : max\right = a\x
max\top = a\y : max\bottom = a\y
; die restlichen einfach überprüfen lassen.
SetMax(b,max)
SetMax(c,max)
SetMax(d,max)
schneller ist es nicht, aber auch nicht langsamer, dafür aber besser lesbar und damit wartbar.
Wenns wirklich nur 4 Werte sind, dann kannst du folgendes probieren:
Code: Alles auswählen
IF a/x < b/x
IF c/x < d /x
;a und c sind kleinste
IF a/x < c/x
max\left = a/x
else
max\left= c/x
endif
; und gleichzeitig B und D die größten
IF b/x > d/x
max\right = b/x
else
max\right = d/x
endif
else
;a und d sind die kleinsten
IF a/x < d/x
max\left = a/x
else
max\left = d/x
endif
; und gleichzeitig B und c die größten
IF b/x > c/x
max\right = b/x
else
max\right = c/x
endif
endif
else
IF c/x < d /x
;b und c sind kleinste
IF b/x < c/x
max/left = b/x
else
max/left = c/x
endif
; und gleichzeitig a und D die größten
IF a/x > d/x
max\right = a/x
else
max\right = d/x
endif
else
;b und d sind die kleinsten
IF b/x < d/x
max\left = b/x
else
max\left = d/x
endif
; und gleichzeitig a und c die größten
IF a/x > c/x
max\right = a/x
else
max\right = c/x
endif
endif
endif
DAS ist aber dann schlecht wartbar! Reduziert aber die IF-Abfragen auf ein minium und auch das setzen der max variable. Würd ich aber nur machen, wenn du wirklich viele 4er-Punkte so abarbeiten musst.
Falls du ein Absolutes Max über viele 4er-Punkte willst, musst du an den Stellen, wo MAX\Left und MAX\Right gesetzt werden, noch überprüfen, ob das alte MAX\LEFT / Max\Right überhaupt kleiner ist als der ermittelte Punkt. Für TOP/BOT gehts analog.
Könntest auch ein Macro machen, indem du dann die Structure-Felder angibst.
Code: Alles auswählen
macro Check( _xy_, _lefttop_, rightbottom_)
IF a/_xy_ < b/_xy_
IF c/_xy_ < d /_xy_
;a und c sind kleinste
IF a/_xy_ < c/_xy_
max\_lefttop_ = a/_xy_
[...] usw. [...]
endmacro
check(x, left, right)
check(y, top, bottom)
Und setz kommentare - das hilft bei späteren Warten ungemein