Code
//to delete all points between the spheres
void gitterschlauchausschneiden (double a1, double a2, double a3, double b1, double b2, double b3, double r)
{
double c1=b1-a1;
double c2=b2-a2;
double c3=b3-a3;
if ((c1==0)&&(c2==0)&&(c3==0)) return;
//Bewegungsvektor
double fest_oben=-a1*c1-a2*c2-a3*c3;
//Konstante
double fest_unten=c1*c1+c2*c2+c3*c3;
//Konstante
//Gitter
double x,y,z;
x=0;
while (x<1000)
{
y=0;
while (y<500)
{
z=0;
while (z<100)
{
double t=((c1*x+c2*y+c3*z)+fest_oben)/fest_unten;
double m1=a1+t*c1;
double m2=a2+t*c2;
double m3=a3+t*c3;
if ((t>=0)&&(t<=1))
if ((m1-x)*(m1-x)+(m2-y)*(m2-y)+(m3-z)*(m3-z)<=r*r)
gitter[(int)x][(int)y][(int)z]=false;
z++;
};
y++;
};
x++;
};
};
Alles anzeigen
Funktioniert so, dauert aber bei 1000 Punkten etwas zu lange.