Wenn Sie eine Box gegeben sind und definieren es nach seinen 8 Eckpunkten AH mit seinen 6 Gesichter zum Beispiel wie folgt definiert:
ABC
ADE
FBC
FGH
DGH
ABE
und eine Linie, die durch einen Richtungsvektor <vx,vy,vz>
und Punkt (x0,y0,z0)
definiert wird, könnten Sie einfach durch eac gehen h von ihnen und erhalten Sie die 2 verschiedenen Punkte, wo die Linie schneidet. Gegeben, so einen Punkt, Richtungsvektor und 3 Ecken des Kastens ...
//p0 is point on line
//direction is direction vector of line
//A,B,C are points on plane
Vector3 lpIntersect(Vector3 p0, Vector3 direction, Vector3 A, Vector3 B, Vector3 C){
Vector3 n = (B - C).cross(C - A);
Vector3 num = (p0-A)*n;
Vector3 denom = direction*n;
if((num.x==0 && num.y==0 && num.z==0) ||
(denom.x==0 && denom.y==0 && denom.z==0))
return Vector3(0,0,0);
return num/denom;
}
Sobald Sie die 2 Punkte nennen haben sie (Ax,Ay,Az)
und (Bx,By,Bz)
und eine Gleichung für die Linie wie
x = x0 + vx*t
y = y0 + vy*t
z = z0 + vz*t
können Sie überprüfen Sie, um zu sehen, welcher Punkt in die Richtung geht, die Sie gaben, indem Sie die oben genannten Punkte einstecken und für t
lösen, um zum Beispiel (x-x0)/vx
zu erhalten, und wenn t>=0
dann der Punkt in die Richtung geht, die Sie gaben, ist es der andere Punkt:
if (((Ax-x0)/vx)>=0){
x = Ax + vx*50;
y = Ay + vy*50;
z = Az + vz*50;
}
else{
x = Bx + vx*50;
y = By + vy*50;
z = Bz + vz*50;
}
Sie können Ihren Punkt in jede Richtung erweitern, und die Antwort auf Ihre Frage ist eine Fläche (kein einzelner Punkt). Andernfalls sollten Sie einen Vektor (Richtung) der Erweiterung angeben. Und besser, solche Fragen im http://math.stackexchange.com/ zu stellen, weil sie nicht mit C# und WPF verwandt sind. – shfire
Ich fragte hier, weil ich dieses mathematische Wissen nicht in einen C# -Code oder eine C# -Methode umwandeln kann. Deshalb habe ich hier gefragt. –
Von welchem mathematischen Wissen sprichst du? Sie haben noch kein Problem klargestellt. – MBo