double circle::intersect(ray const& r) const { double t; point3d v1, v2; v1=normalize(p1_-center_); v2=normalize(p2_-center_); point3d n=normalenvektor(v1, v2); double s=scaleproduct(n, center_); point3d dir=normalize(r.getDir()); if (scaleproduct(n, dir)!=0) { double temp=(scaleproduct(n, r.getOrigin())+s)/scaleproduct(n, dir); point3d schnitt=r.getOrigin()+temp*dir; //std::cout<<"schnitt: "<<schnitt<<std::endl; if (is_inside(schnitt)) { //std::cout<<"Schnittpunkt mit dem Kreis"<<std::endl; return t=temp; } else { //std::cout<<"Schnittpunkt mit Ebene aber nicht mit Kreis"<<std::endl; return t=-1; } } else { //std::cout<<"Kein Schnittpunkt mit Kreisebene"<<std::endl; return t=-1; } }