All pastes #2052250 Raw Edit

cyrus Beck clipping

public cpp v1 · immutable
#2052250 ·published 2011-04-30 13:57 UTC
rendered paste body
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			}		}	}