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)
Spoiler anzeigen
$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