Jeg kan beskrivelsen:
Hvis du har en kasse der er defineret vha. 6 planer i rummet, så ved du også hvilke tal(koordinater (x, y, z)) der ligger inde kassen og hvilke der ikke gør. Lad os for sjov skyld kalde disse tal i hver kasse for mængder. Når et koordinat fra den ene mængde ligger i den anden mængde, de deler et eller flere koordinater - altså delmængde, så ved du at kasserne er inde i hinanden. Problemet er så bare at der i 3D – og matematikkens verden er uendeligt mange koordinater i OpenGL verdenen. Så det bliver noget tungt stads kan du nok se. Men der er hjælp på vej, som jeg skrev, skal du kontrollere og de 6 planer som en kube er givet ved, skærer hinanden. Desværre kan jeg ikke hjælpe dig da vi ikke er nået så langt endnu i matematik. Men du kan jo starte med noget nemt og 2D, nemlig hvornår 2 linier på skærer hinanden: (Eksemplet er givet med en normal form men kan uden videre bruges) Desuden skal du huske på, når du går over til 3D, at planer i rummet består af 4 linier, eller 2x2 parallelle…
<pre>
//Linierne skal være givet på formen ax+by=c
//Linierne l og m er givet ved:
// l: 2x-y=5
// m: x+3y=6
type
TPunkt = record
x, y: single;
end;
var
//Determinanterne
hDet, xDet, yDet: single;
//Resultaterne, hvis der er nogle:
Punkt: TPunkt;
{...}
function RegnDet(n1, n2, m1, m2: single): single;
begin
Result := n1 * m2 - m1 * n2;
end;
function GivSkaering(a1, a2, b1, b2, c1, c2: single): TPunkt;
begin
//først skal du regne hoveddeterminanten ud men husk: hvis
//den er 0, så skærer linierne ikke hinanden og derfor kan
//du ikke regne videre med den!
//det er fordi du senere kommer til at dividere
//med 0 og det må man ik!
hDet := RegnDet(a1, a2, b1, b2); //Dette giver 7
//Allerede her kan du kontrollere om de
//skærer hinanden
if hDet = 0 then
Exit;
//Herunder regner du skæringspunktet mellem linierne
//Så skal du regne Determinantet for x-koordinatet ud
//og den kommer her:
xDet := RegnDet(c1, c2, b1, b2); //Dette giver 21
//Så skal du regne Determinantet for x-koordinatet ud
//og den kommer her:
yDet := RegnDet(a1, a2, c1, c2); //Dette giver 7
Result.x := xDet / hDet;
Result.y := yDet / hDet;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Punkt := GivSkaering(2.0, 1.0, -1.0, 3.0, 5.0, 6.0);
Caption := 'x: ' +FloatToStr(Punkt.x) +' y: ' +FloatToStr(Punkt.y) //Resultatet er (3, 1)
end;
</pre>