void ExerciseN_ABXY::clipping(vec2 line[2],const vec2 edge[]){ //festsetzen der Arraygröße für die Clipkanten //wird hier noch manuell gemacht, ich weiss noch nicht so recht wie in c++ //die Arraygröße zur laufzeit festgestellt wird //anscheinend gehts mit size = sizeof (array) / sizeof(array[0]) //gesamtgröße des arrays durch ein element, hatte aber in meinen tests nich so geklappt int size = 4; // k = n+1 der clipkante int k = 0; // richtungsvektor der strecke vec2 dirLine = line[1]-line[0]; //für jede clipkante werden die clippoints der strecke bestimmt for(int i = 0; i<size; i++){ k++; if(k==(size)){ //wenn k = überlauf k = 0 k = 0; } //richtungsvektor der jeweiligen clipkante errechnet durch: //punkt Pn+1 - punkt Pn vec2 dirEdge = edge[k]-edge[i]; //normalen vektor der clipkante: //Richtungsvektor clipkante (a,b) -> normalenvektor = (-b,a) easy vec2 *norm = new vec2( -dirEdge.y , dirEdge.x ); //skalarprodukt aus normalenvektor der clipkante und richtungsvektor der strecke double nd = norm->dotProduct(*norm, dirLine); //falls n != 0 dann strecke nicht parallel zur clipkante if(nd!=0){ //berechne t für die Strecke double t = - ( (norm->dotProduct(*norm, ( line[0]-edge[i])) ) / nd ); //falls t nicht größer als 1 oder kleiner als 0 dann muss geclipped werden: if(t>=0||t<=1){ //falls nd<0 -> Eintrittspunkt if(nd<0&&t>0){ vec2 clipPointA = line[0] + t * dirLine; line[0] = clipPointA; } //falls nd>0 Austrittspunkt if(nd>0&&t<1){ vec2 clipPointB = line[0] + t * dirLine; line[1] = clipPointB; } } else{ //hier fehlt noch das komplette ausschneiden } } }