Hey,
Danke für die ganzen Glückwünsche :).
Ordentlich gefeiert wird am Freitag...
Auch an SeuBo und den Rest, Alles Gute
Hey,
Danke für die ganzen Glückwünsche :).
Ordentlich gefeiert wird am Freitag...
Auch an SeuBo und den Rest, Alles Gute
So?
[autoit]#include <String.au3>
Local $table = "", $buffer, $string = '<TABLE width="100%" border=0><TBODY><TR><TD vAlign=top bgColor=#c0c0c0><FONT face=Arial color=#ff0000 size=7><P align=center><STRONG><U>LEUTNANT</U></STRONG></P><P align=center><STRONG><U>BLUEBERRY</U></STRONG></P><P align=center><STRONG><U><FONT size=5>Band 35 - "Gebrochene Nase"</FONT></U></STRONG></P><P align=center><STRONG><U><FONT size=5></FONT></U></STRONG> </P><P align=center><FONT size=5>Militärische Geheimaufträge, Indianeraufstände, </FONT></P><P align=center><FONT size=5>skrupellose Banditen - </FONT></P><P align=center><FONT size=5>das ist die Welt des unverwüstlichen Haudegens </FONT></P><P align=center><FONT size=5><STRONG>Leutnant Blueberry</STRONG>.</FONT></P><P align=center><FONT size=5></FONT> </P><P align=center><FONT size=5>Das von dem großartigen Zeichner</FONT></P><P align=center><FONT size=5> <STRONG>Giraud</STRONG></FONT></P><P align=center><FONT size=5> in Szene gesetzte und von dem</FONT></P><P align=center><FONT size=5> herausragenden Autor</FONT></P><P align=center><FONT size=5> <STRONG>Charlier</STRONG></FONT></P><P align=center><FONT size=5> getextete Album ist 1985 im Ehapa-Verlag </FONT></P><P align=center><FONT size=5>erschienen.</FONT></P><P align=center><FONT size=5></FONT> </P><P align=center><P align=center><FONT size=5></FONT></P><FONT size=5></FONT><P></P><P align=center><FONT size=5>Hardcover</FONT></P><P align=center><FONT size=5>DIN A 4, ca. 48 Seiten </FONT></P><P align=center> </P><P align=center><FONT face="Arial Black" color=#ff0000><FONT size=4>Zustand: Sehr gut</FONT></FONT></P></FONT><P class=MsoNormal align=center><FONT color=#ff0000><SPAN style="FONT-SIZE: 10pt; FONT-STYLE: italic; FONT-FAMILY: Arial Black"></SPAN></FONT> </P><P class=MsoNormal align=center><FONT color=#ff0000><SPAN style="FONT-SIZE: 10pt; FONT-STYLE: italic; FONT-FAMILY: Arial Black"><FONT size=3></FONT> </P><P align=center><FONT face="Arial Black" color=#ff0000 size=3><FONT size=3>Alle Preise inkl.gesetzlicher MwSt</FONT></FONT></P></SPAN></FONT><SPAN style="mso-ansi-language: DE"><P class=MsoNormal><SPAN style="mso-ansi-language: DE"></SPAN> </P><P class=MsoNormal><SPAN style="mso-ansi-language: DE"><?XML:NAMESPACE PREFIX = O /><O:P></O:P></SPAN></P><P class=MsoNormal></P></SPAN></TD></TR><O:P></O:P></SPAN><P></P></TD></TR></TBODY></TABLE><CENTER><IMG src="http://pics.ebay.com/aw/pics/sell/templates/images/k2/tagline.gif" border=0> <BR><FONT face=Arial,Helvetica size=2>Erstellt durch <A href="http://pages.ebay.de/turbo_lister/">eBay Turbo Lister</A> <BR>Das kostenlose Einstell-Tool. Stellen Sie Ihre Artikel schnell und bequem ein und verwalten Sie Ihre aktiven Angebote. </FONT></CENTER>'
$split = StringSplit($string, "</P>", 1)
For $i = 1 To UBound($split) - 1
$between = _StringBetween($split[$i], ">", "<")
$buffer = ''
For $j = 0 To UBound($between) - 1
$replace = StringRegExpReplace($between[$j], "<.+>", "")
$replace = StringReplace($replace, " ", " ")
if StringRegExp($replace, "\w") Then $buffer &= $replace
Next
If $buffer <> '' Then $table &= $buffer & @CRLF
Next
MsgBox(0, "", $table)
Sehr cole Idee und Umsetzung!
Nicht schlecht...
Jo, das is keine Problem...
Einfach eine Ebene aufstellen mit dem Richtungsvektor von der Geraden durch den Punkt P.
Dann Schnittpunkt von Gerade und Ebene (Einsetzen von Geradengleichung in Ebenengleichung).
Mach ich gleich.
/Edit:
$schnittpunkt = _punkt("(3|4|5)", "(6|7|9)", "(9|10|11)")
MsgBox(0, "", $schnittpunkt)
Func _punkt($Aufpunktgerade, $Richtungsvektorgerade, $dritterpunkt)
Local $splitarr[3] = [$Aufpunktgerade, $Richtungsvektorgerade, $dritterpunkt], $lambda[4]
For $i = 0 To 2
If Not StringRegExp($splitarr[$i], "\(\d+\|\d+\|\d+\)") Then Return -1
Next
$Aufpunktgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[0], 1), 1), "|")
$Richtungsvektorgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[1], 1), 1), "|")
$dritterpunkt = StringSplit(StringTrimRight(StringTrimLeft($splitarr[2], 1), 1), "|")
;neue Ebene 0 = $Richtungsvektorgerade * (x - $dritterpunkt)
; 0 = $Richtungsvektorgerade * x - c
; für x Geradengleichung einsetzen
; x = $Aufpunktgerade + lambda * $Richtungsvektorgerade
; 0 = $Richtungsvektorgerade * ($Aufpunktgerade + lambda * $Richtungsvektorgerade) - c
$lambda[1] = (0 - (_calculatevector($Richtungsvektorgerade, 'scalar', $Aufpunktgerade) - _calculatevector($Richtungsvektorgerade, 'scalar', $dritterpunkt))) / _calculatevector($Richtungsvektorgerade, 'scalar', $Richtungsvektorgerade)
$lambda[2] = $lambda[1]
$lambda[3] = $lambda[1]
; lamda einsetzen
$ergebnis = _calculatevector($Aufpunktgerade, '+', _calculatevector($lambda, '*', $Richtungsvektorgerade))
Return '(' & $ergebnis[1] & '|' & $ergebnis[2] & '|' &$ergebnis[3] & ')'
EndFunc ;==>_intersection
Func _calculatevector($parameter1, $arithmetic, $parameter2)
; kann vektoren addieren, subtrahieren, dividieren, multiplizieren + kreuzprodukt ausrechnen ($aithmetic muss 'x' sein für Kreuzprodukt)
; + Skalarprodukt ($aithmetic muss 'scalar' sein für Skalarprodukt)
Switch $arithmetic
Case 'scalar'
Return $parameter1[1] * $parameter2[1] + $parameter1[2] * $parameter2[2] + $parameter1[3] * $parameter2[3]
Case 'x'
Local $result[4]
$result[1] = ($parameter1[2] * $parameter2[3]) - ($parameter1[3] * $parameter2[2])
$result[2] = $parameter1[3] * $parameter2[1] - $parameter1[1] * $parameter2[3]
$result[3] = $parameter1[1] * $parameter2[2] - $parameter1[2] * $parameter2[1]
Case Else
Local $result[4]
$result[1] = Execute($parameter1[1] & $arithmetic & $parameter2[1])
$result[2] = Execute($parameter1[2] & $arithmetic & $parameter2[2])
$result[3] = Execute($parameter1[3] & $arithmetic & $parameter2[3])
EndSwitch
Return $result
EndFunc ;==>_calculatevector
Wenns stimmt isses Glückssache. Ich kann mich kaum noch konzentrieren, rechne bitte nach :).
Welcher nächste Punkt auf welcher Geraden?
Keys und Keynames ist bei dir das selbe?
Und das alles in einem Array? Du hast dich ziemlich missverständlich ausgedrückt.
Meine interpretation:
#include <Array.au3>
Global $keys[1]
Global $file = @WindowsDir & "\win.ini"
$var = IniReadSectionNames($file)
If Not @error Then
For $i = 1 To UBound($var) - 1
$section = IniReadSection($file, $var[$i])
If Not @error Then
For $j = 1 To $section[0][0]
_ArrayAdd($keys, $section[$j][0])
Next
EndIf
Next
EndIf
$keys[0] = UBound($keys)
_ArrayDisplay($keys)
Mir ist gerade eine Idee gekommen.
Ich hab nicht Nachgerechnet, aber nuts, du hast als Richtungsvektor für die Gerade (1|0|0) benutzt.
Dieser Richtungsvektor ist parallel zur Ebene und somit haben die gar keinen Schnittpunkt!!!
Also, es ist nicht zwangsläufig mein Fehler :).
War klar, dass da noch irgendwas falsch is .
Ich hab beim Umformen nach Lambda einen Fehler, den ich jetzt aber auf die schnelle nicht finde.
Ich suche ihn heute Abend, bin jetzt weg.
Lees dir das noch durch:
http://www.blackpawn.com/texts/pointinpoly/default.html
Das ist sehr gut beschrieben. Da hab ich auch am Schluss ein bisschen abgekupfert :P.
Hey,
also so müsste es gehen.
Die Frage ist, ob man die Ränder des Dreiecks als Punkte im Dreieck dazuzählt.
Wenn nicht musst du die Bedingung ändern:
$isinT = ($u >= 0) And ($v >= 0) And ($u + $v <= 1)
[/autoit]Wenn man geschickt umformt brauch man keinen Gauß :). Musste aber viel lesen bis ich das verstanden hatte :D.
$schnittpunkt = _intersection("(0|0|0)", "(1|0|0)", "(0|1|0)", "(0|0|0)", "(1|0|1)")
MsgBox(0, "", $schnittpunkt)
Func _intersection($dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade)
Local $splitarr[5] = [$dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade], $lambda[4], $mp0[4], $isinT
For $i = 0 To 4
If Not StringRegExp($splitarr[$i], "\(\-?\d+\|\-?\d+\|\-?\d+\)") Then Return SetError(1)
Next
$dreieckA = StringSplit(StringTrimRight(StringTrimLeft($splitarr[0], 1), 1), "|")
$dreieckB = StringSplit(StringTrimRight(StringTrimLeft($splitarr[1], 1), 1), "|")
$dreieckC = StringSplit(StringTrimRight(StringTrimLeft($splitarr[2], 1), 1), "|")
$Aufpunktgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[3], 1), 1), "|")
$Richtungsvektorgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[4], 1), 1), "|")
; Aufpunkt von Ebene = A
; 1. Richtungsvektor = -A+B = B-A
; 2. Richtungsvektor = -A+C = C-A
$dreieckrichtungsvektor1 = _calculatevector($dreieckB, '-', $dreieckA)
$dreieckrichtungsvektor2 = _calculatevector($dreieckC, '-', $dreieckA)
; normalenvektor Ebene = $dreieckrichtungsvektor1 kreuz $dreieckrichtungsvektor2
$normalenvektor = _calculatevector($dreieckrichtungsvektor1, 'x', $dreieckrichtungsvektor2)
; Ebenengleichung: 0 = $normalenvektor * (x - Aufpunkt)
; <=> 0 = $normalenvektor * (x - $dreieckA)
; <=> 0 = $normalenvektor *(skalar) x - $normalenvektor *(skalar) $dreieckA
$c = _calculatevector($normalenvektor, 'scalar', $dreieckA)
; Ebenengleichung: 0 = $normalenvektor * x - $c
; Geradengleichung: x = $Aufpunktgerade + lambda * $Richtungsvektorgerade
; --> Einsetzen von Geradengleichung in Ebenengleichung. Umformen nach lambda. Einsetzen von lambda in Geradengleichung
; --> neue Gleichung $normalenvektor *(skalar) $Aufpunktgerade + $normalenvektor *(skalar) $Richtungsvektorgerade * lambda - $c = 0
$lambda[1] = (0 - _calculatevector($normalenvektor, 'scalar', $Aufpunktgerade) + $c) / _calculatevector($normalenvektor, 'scalar', $Richtungsvektorgerade)
$lambda[2] = $lambda[1]
$lambda[3] = $lambda[1]
; lambda in Geradengleichung einsetzen
$intersection = _calculatevector($Aufpunktgerade, '+', _calculatevector($lambda, '*', $Richtungsvektorgerade))
; prüfen ob Punkt in Dreieck
; Richtungsvektor von A nach Schnittpunkt
$richtungsvektor2 = _calculatevector($intersection, '-', $dreieckA)
$scalar00 = _calculatevector($dreieckrichtungsvektor2, 'scalar', $dreieckrichtungsvektor2)
$scalar01 = _calculatevector($dreieckrichtungsvektor2, 'scalar', $dreieckrichtungsvektor1)
$scalar02 = _calculatevector($dreieckrichtungsvektor2, 'scalar', $richtungsvektor2)
$scalar11 = _calculatevector($dreieckrichtungsvektor1, 'scalar', $dreieckrichtungsvektor1)
$scalar12 = _calculatevector($dreieckrichtungsvektor1, 'scalar', $richtungsvektor2)
$invDenom = 1 / ($scalar00 * $scalar11 - $scalar01 * $scalar01)
$u = ($scalar11 * $scalar02 - $scalar01 * $scalar12) * $invDenom
$v = ($scalar00 * $scalar12 - $scalar01 * $scalar02) * $invDenom
$isinT = ($u >= 0) And ($v >= 0) And ($u + $v <= 1)
Return '(' & $intersection[1] & '|' & $intersection[2] & '|' & $intersection[3] & ')' & @TAB & $isinT
EndFunc ;==>_intersection
Func _calculatevector($parameter1, $arithmetic, $parameter2)
; kann vektoren addieren, subtrahieren, dividieren, multiplizieren + kreuzprodukt ausrechnen ($aithmetic muss 'x' sein für Kreuzprodukt)
; + Skalarprodukt ($aithmetic muss 'scalar' sein für Skalarprodukt)
Switch $arithmetic
Case 'scalar'
Return $parameter1[1] * $parameter2[1] + $parameter1[2] * $parameter2[2] + $parameter1[3] * $parameter2[3]
Case 'x'
Local $result[4]
$result[1] = ($parameter1[2] * $parameter2[3]) - ($parameter1[3] * $parameter2[2])
$result[2] = $parameter1[3] * $parameter2[1] - $parameter1[1] * $parameter2[3]
$result[3] = $parameter1[1] * $parameter2[2] - $parameter1[2] * $parameter2[1]
Case Else
Local $result[4]
$result[1] = Execute($parameter1[1] & $arithmetic & $parameter2[1])
$result[2] = Execute($parameter1[2] & $arithmetic & $parameter2[2])
$result[3] = Execute($parameter1[3] & $arithmetic & $parameter2[3])
EndSwitch
Return $result
EndFunc ;==>_calculatevector
Das Rückgabeformat ist nicht geschickt gewählt und der RegEx muss noch angepasst werden, weil bis jetzt nur Ganzzahlen erkannt werden.
wenn du mir glaubhaft bestätigen kannst, daß ein DREIECK ein RÄUMLICHES Objekt ist, dann denk ich nochmal drüber nach
Das hab ich ja nicht gesagt.
Ja, ok, wundert mich nur, warum die Lösung nirgendwo auftaucht.
Aber eigentlich müsste es stimmen, weil immer eine Pyramide entsteht. Und die Innenwinkel können niemals 360° ergeben.
Ok, aber trotzdem ist es komplizierter als die andere Bedingung, weil man dazu die Richtungsvektoren multiplizieren muss und dann durch das Produkt der beiden Beträge teilen muss.
Bei der anderen braucht man nur die beiden Richtungsvektoren der Ebene, die man sowieso ausrechnen muss.
2 Möglichkeiten:
-Wenn Punkt im Dreieck, dann ist die Summe der 3 Winkel zwischen den Geraden PA,PB und PC = 360° ansonsten liegt der Punkt nicht im Dreieck.
-Gleichungssystem lösen: stell die 3 Gleichungen auf und ich mach den Löser, aber der Vektorkram war noch nie mein Ding
Die Bedingung gilt im Koordinatensystem mit 3 Achsen glaube ich nicht. Bist du dir da sicher?
moritz1243, kannst du mir vielleicht Koordinaten nennen, bei denen der Punkt im Dreieck liegt?
Ich habe hier eine Lösung, nur muss ich zuerst schauen, ob das was ich da gemacht habe stimmt.
Ok, den Schnittpunkt mit der Ebene, in der auch das Dreieck liegt kann ich ausrechnen.
$schnittpunkt = _intersection("(3|4|5)", "(6|7|9)", "(9|10|11)", "(12|13|14)", "(15|16|17)")
MsgBox(0, "", $schnittpunkt)
Func _intersection($dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade)
Local $splitarr[5] = [$dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade], $lambda[4]
For $i = 0 To 4
If Not StringRegExp($splitarr[$i], "\(\d+\|\d+\|\d+\)") Then Return -1
Next
$dreieckA = StringSplit(StringTrimRight(StringTrimLeft($splitarr[0], 1), 1), "|")
$dreieckB = StringSplit(StringTrimRight(StringTrimLeft($splitarr[1], 1), 1), "|")
$dreieckC = StringSplit(StringTrimRight(StringTrimLeft($splitarr[2], 1), 1), "|")
$Aufpunktgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[3], 1), 1), "|")
$Richtungsvektorgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[4], 1), 1), "|")
; Aufpunkt von Ebene = A
; 1. Richtungsvektor = -A+B = B-A
; 2. Richtungsvektor = -A+C = C-A
$dreieckrichtungsvektor1 = _calculatevector($dreieckB, '-', $dreieckA)
$dreieckrichtungsvektor2 = _calculatevector($dreieckC, '-', $dreieckA)
; normalenvektor Ebene = $dreieckrichtungsvektor1 kreuz $dreieckrichtungsvektor2
$normalenvektor = _calculatevector($dreieckrichtungsvektor1, 'x', $dreieckrichtungsvektor2)
; Ebenengleichung: 0 = $normalenvektor * (x - Aufpunkt)
; <=> 0 = $normalenvektor * (x - $dreieckA)
; <=> 0 = $normalenvektor *(skalar) x - $normalenvektor *(skalar) $dreieckA
$c = _calculatevector($normalenvektor, 'scalar', $dreieckA)
; Ebenengleichung: 0 = $normalenvektor * x - $c
; Geradengleichung: x = $Aufpunktgerade + lambda * $Richtungsvektorgerade
; --> Einsetzen von Geradengleichung in Ebenengleichung. Umformen nach lambda. Einsetzen von lambda in Geradengleichung
; --> neue Gleichung $normalenvektor *(skalar) $Aufpunktgerade + $normalenvektor *(skalar) $Richtungsvektorgerade * lambda - $c = 0
$lambda[1] = (0 - _calculatevector($normalenvektor, 'scalar', $Aufpunktgerade) + $c) / _calculatevector($normalenvektor, 'scalar', $Richtungsvektorgerade)
$lambda[2] = $lambda[1]
$lambda[3] = $lambda[1]
; lambda in Geradengleichung einsetzen
$intersection = _calculatevector($Aufpunktgerade, '+', _calculatevector($lambda, '*', $Richtungsvektorgerade))
;~ _ArrayDisplay($intersection)
Return '(' & $intersection[1] & '|' & $intersection[2] & '|' & $intersection[3] & ')'
EndFunc ;==>_intersection
Func _calculatevector($parameter1, $arithmetic, $parameter2)
; kann vektoren addieren, subtrahieren, dividieren, multiplizieren + kreuzprodukt ausrechnen ($aithmetic muss 'x' sein für Kreuzprodukt)
; + Skalarprodukt ($aithmetic muss 'scalar' sein für Skalarprodukt)
Switch $arithmetic
Case 'scalar'
Return $parameter1[1] * $parameter2[1] + $parameter1[2] * $parameter2[2] + $parameter1[3] * $parameter2[3]
Case 'x'
Local $result[4]
$result[1] = ($parameter1[2] * $parameter2[3]) - ($parameter1[3] * $parameter2[2])
$result[2] = $parameter1[3] * $parameter2[1] - $parameter1[1] * $parameter2[3]
$result[3] = $parameter1[1] * $parameter2[2] - $parameter1[2] * $parameter2[1]
Case Else
Local $result[4]
$result[1] = Execute($parameter1[1] & $arithmetic & $parameter2[1])
$result[2] = Execute($parameter1[2] & $arithmetic & $parameter2[2])
$result[3] = Execute($parameter1[3] & $arithmetic & $parameter2[3])
EndSwitch
Return $result
EndFunc ;==>_calculatevector
Ob der Punkt im Dreieckt liegt kann man nicht so einfach bestimmen. Das ist sehr viel komplexer.
Man muss prüfen ob AP = r * AB + s * AC
mit
r >= 0 und u <= 1
s >= 0 und s <= 1
r+s = 1
Zuerst musst du es hinbekommen aus der Linearkombination r und s zu berechnen. Da das ein Gleichungsystem mit 2 Unbekannten ist, wird das kompliziert. Die Lösung, die am einfachsten zu implementieren ist, ist der Gaußsche Algorithmus.
Einfach ist es bestimmt nicht, aber mit etwas Zeit machbar.
/Edit:
Jetzt wo ich den Thread komplett durchgelesen habe, sehe ich, dass nuts das alles schonmal geschrieben hat :D.
Sry, dann hab ich dir jetzt gar nicht weitergeholfen.
http://www.cs.virginia.edu/~gfx/Courses/2…ntersection.pdf
Diesen Algorithmus könnte man umsetzen. Aber ich habe mich nicht näher damit beschäftigt. Morgen sehen wir weiter
http://www.cs.princeton.edu/courses/archiv…cast/sld016.htm
Der 1. Schritt ist immerhin gemacht :D.
Ich hab gestern Abi dadrüber geschrieben.
Es geht dir also nur um den Schnittpunkt von dem Dreieck mit der Gerade?
Müsste machbar sein, ich setze mich mal dran...
/Edit:
mein Ansatz (is noch ned fertig, weil der Schnittpunkt noch nicht ausgerechnet wird. Aber alle Grundrechenarten mit Vektoren sind drin, damit kann man weiter machen. Habe jetzt keine Zeit mehr, aber heute abend oder morgen mach ich das auch noch)
$schnittpunkt = _intersection("(3|4|5)", "(6|7|9)", "(9|10|11)", "(12|13|14)", "(15|16|17)")
[/autoit] [autoit][/autoit] [autoit]Func _intersection($dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade)
Local $splitarr[5] = [$dreieckA, $dreieckB, $dreieckC, $Aufpunktgerade, $Richtungsvektorgerade]
For $i = 0 To 4
If Not StringRegExp($splitarr[$i], "\(\d+\|\d+\|\d+\)") Then Return -1
Next
$dreieckA = StringSplit(StringTrimRight(StringTrimLeft($splitarr[0], 1), 1), "|")
$dreieckB = StringSplit(StringTrimRight(StringTrimLeft($splitarr[1], 1), 1), "|")
$dreieckC = StringSplit(StringTrimRight(StringTrimLeft($splitarr[2], 1), 1), "|")
$Aufpunktgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[3], 1), 1), "|")
$Richtungsvektorgerade = StringSplit(StringTrimRight(StringTrimLeft($splitarr[4], 1), 1), "|")
; Aufpunkt von Ebene = A
; 1. Richtungsvektor = -A+B = B-A
; 2. Richtungsvektor = -A+C = C-A
$dreieckrichtungsvektor1 = _calculatevector($dreieckB, '-', $dreieckA)
$dreieckrichtungsvektor2 = _calculatevector($dreieckC, '-', $dreieckA)
; normalenvektor Ebene = $dreieckrichtungsvektor1 kreuz $dreieckrichtungsvektor2
$normalenvektor = _calculatevector($dreieckA, 'x', $dreieckB)
; Ebenengleichung: 0 = $normalenvektor * (x - Aufpunkt)
; <=> 0 = $normalenvektor * (x - $dreieckA)
; <=> 0 = $normalenvektor *(skalar) x - $normalenvektor *(skalar) $dreieckA
$c = _calculatevector($normalenvektor, 'scalar', $dreieckA)
; Ebenengleichung: 0 = $normalenvektor * x - $c
; Geradengleichung: x = $Aufpunktgerade + lamda * $Richtungsvektorgerade
; --> Einsetzen von Geradengleichung in Ebenengleichung. Umformen nach lamda. Einsetzen von lamda in Geradengleichung
; Ausrechnen von Punkt --> Schnittpunkt von Ebene und Gerade
; Schauen ob Punkt in Dreieck liegt
EndFunc ;==>_intersection
Func _calculatevector($parameter1, $arithmetic, $parameter2)
; kann vektoren addieren, subtrahieren, dividieren, multiplizieren + kreuzprodukt ausrechnen ($aithmetic muss 'x' sein für Kreuzprodukt)
; + Skalarprodukt ($aithmetic muss 'scalar' sein für Skalarprodukt)
Switch $arithmetic
Case 'scalar'
Return $parameter1[1] * $parameter2[1] + $parameter1[2] * $parameter2[2] + $parameter1[3] * $parameter2[3]
Case 'x'
Local $result[4]
$result[1] = ($parameter1[2] * $parameter2[3]) - ($parameter1[3] * $parameter2[2])
$result[2] = $parameter1[3] * $parameter2[1] - $parameter1[1] * $parameter2[3]
$result[3] = $parameter1[1] * $parameter2[2] - $parameter1[2] * $parameter2[1]
Case Else
Local $result[4]
$result[1] = Execute($parameter1[1] & $arithmetic & $parameter2[1])
$result[2] = Execute($parameter1[2] & $arithmetic & $parameter2[2])
$result[3] = Execute($parameter1[3] & $arithmetic & $parameter2[3])
EndSwitch
Return $result
EndFunc ;==>_calculatevector
Hey,
also mein Gamepad ist super erkannt worden.
Auch ansonsten keine Fehler gefunden :).
Schönes Programm, macht spass
Hi,
ich finde euer Projekt echt toll und hätte nicht gedacht, dass ihr das solange durchhaltet.
Leider ist die Version (noch) etwas verbuggt. Manche Einstellungen lassen sich erst nach dem Neustart wieder zurückstellen. Auch die Steuerung ist vielleicht ein bisschen träge und oft nicht präzise :).
Bin aber trotz allem echt beeindruckt! Macht weiter so...
Vielleicht könnt ihr ja auch den Vorschlag von Progandy aufgreifen und das Script von Grund auf neu aufbauen.
In 2 Wochen nach dem Abi schreib ich die UDF. Hab mir grad den Header angeguggt, das is eigentlich nicht besonders schwer.
Auch wenns für dich dann zu spät is, vielleicht kanns ja jemand gebrauchen :D.
Ich hab es hinbekommen EXIF Daten ohne UDF Binär zu ersetzen. Allerdings muss man da zuerst die JPG Header ganz genau studieren, weil sich die Länge nicht ändern darf. Die Länge muss man auch noch umschreiben.
Die Exif Daten stehen im Klartext in der JPG-Datei.
Du musst nur mit Fileread die Datei auslesen und dann String-Funktionen oder Reguläre Ausdrücke anwenden.
Im Prinzip sollte das kein Problem sein.
Öffne einfach mal eine kleine JPG-Datei im Editor und du wirst sehen was ich meine :).
Wenn du Hilfe brauchst wird dir hier bestimmt geholfen :).
786 | 2 Stk | 2 Stk | 530 Stanzung
Soll das jetzt heißen, dass es 2 Teile mit einer Länge von 786 gibt plus
2 Teile mit einer Länge von 786 und einer Stanzung von 530 gibt?
Wenn ja muss man ja nur die Array Elemente aneinander hängen...
Hey,
so, ich habe eben kurz ein bisschen dran gebastelt...
Es ist nicht sehr sauber und schwer zu verstehen, das tut mir leid, aber das ging auf die schnelle nicht besser.
Ansonsten hoffe ich, dass ich einigermaßen getroffen habe, was du gemeint hast. Die Stanzung könnte man noch in eine extra Spalte auslagern, aber da hatte ich ehrlich gesagt jetzt keine Lust mehr drauf.
Gib dann nochma Rückmeldung...
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
$Form1 = GUICreate("Form1", 820, 443, -1, -1)
$Liste = GUICtrlCreateListView("Pos.|T1|T2|T3|T4|T5|||", 20, 133, 780, 300, BitOR($LVS_REPORT, $LVS_EDITLABELS, $WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE))
GUICtrlSetResizing(-1, $GUI_DOCKALL)
_GUICtrlListView_SetColumnWidth($Liste, 0, 130)
_GUICtrlListView_SetColumnWidth($Liste, 1, 80)
_GUICtrlListView_SetColumnWidth($Liste, 2, 80)
_GUICtrlListView_SetColumnWidth($Liste, 3, 80)
_GUICtrlListView_SetColumnWidth($Liste, 4, 80)
_GUICtrlListView_SetColumnWidth($Liste, 5, 80)
_GUICtrlListView_SetColumnWidth($Liste, 6, 80)
_GUICtrlListView_SetColumnWidth($Liste, 7, 80)
_GUICtrlListView_SetColumnWidth($Liste, 8, 80)
_GUICtrlListView_SetExtendedListViewStyle($Liste, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
GUICtrlCreateListViewItem("A" & "|" & 225 & "|" & 355 & "|" & 400 & "|" & 102 & "|" & 100 & "|" & 50, $Liste)
GUICtrlCreateListViewItem("B" & "|" & 325 & "|" & 278 & "|" & 400 & "|" & 207 & "|" & 366 & "|" & 50, $Liste)
GUICtrlCreateListViewItem("C" & "|" & 425 & "|" & 645 & "|" & 500 & "|" & 752 & "|" & 75, $Liste)
GUICtrlCreateListViewItem("D" & "|" & 225 & "|" & 100 & "|" & 786 & "|" & 400 & "|" & 200 & "|" & "|" & 530, $Liste)
GUICtrlCreateListViewItem("E" & "|" & 125 & "|" & 355 & "|" & 900 & "|" & 400 & "|" & 316 & "|" & "|" & 530, $Liste)
GUICtrlCreateListViewItem("F" & "|" & 100 & "|" & 355 & "|" & 786 & "|" & 752 & "|" & 30 & "|" & "|" & 530, $Liste)
GUICtrlCreateListViewItem("G" & "|" & 355 & "|" & 225 & "|" & 120 & "|" & 400 & "|" & 100, $Liste)
GUISetState(@SW_SHOW)
$Button = GUICtrlCreateButton("Stückliste", 350, 60, 120, 25)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
stklisterech()
EndSwitch
WEnd
Func stklisterech()
Local $counter, $aListe[1], $aListe2[1][2]
$iColumn = _GUICtrlListView_GetColumnCount($Liste)
$iRow = _GUICtrlListView_GetItemCount($Liste)
For $i = 0 To $iColumn - 1
For $j = 1 To $iRow - 2
$sItem = _GUICtrlListView_GetItemText($Liste, $i, $j)
If $sItem <> '' Then
If ($j = 2) And (_GUICtrlListView_GetItemText($Liste, $i, 6) <> '') Then
$sItem &= ' ; ' & _GUICtrlListView_GetItemText($Liste, $i, 6)
ElseIf ($j = 3) And (_GUICtrlListView_GetItemText($Liste, $i, 7) <> '') Then
$sItem &= ' ; ' & _GUICtrlListView_GetItemText($Liste, $i, 7)
EndIf
_ArrayAdd($aListe, $sItem)
EndIf
Next
Next
_ArraySort($aListe)
_ArrayAdd($aListe, 'End')
;~ _ArrayDisplay($aListe)
; Doppelte Finden...
$i = 1
While $i <= UBound($aListe) - 1
$counter = 0
For $j = $i + 1 To UBound($aListe) - 1
If $aListe[$j] = $aListe[$i] Then
$counter += 1
Else
ReDim $aListe2[UBound($aListe2) + 1][2]
$aListe2[UBound($aListe2) - 1][0] = $aListe[$i]
$aListe2[UBound($aListe2) - 1][1] = $counter + 1
$i += $counter
ExitLoop
EndIf
Next
$i += 1
WEnd
$aListe2[0][0] = "Wert"
$aListe2[0][1] = "Anzahl"
_ArrayDisplay($aListe2)
EndFunc ;==>stklisterech