38 double m = (y - yc)/(x - xc);
42 double xi1, yi1, xi2, yi2;
43 ComputeLinePointOfTangenceOnACircle(mperp, xc, yc, R, xi1, yi1, xi2, yi2);
46 double xp = 999, yp = -999;
48 sqrt((xi1 - x) * (xi1 - x) + (yi1 - y) * (yi1 - y)) <
sqrt((xi2 - x) * (xi2 - x) + (yi2 - y) * (yi2 - y)) ? (xp = xi1 , yp = yi1) : (xp = xi2 , yp = yi2);
49 return TVector2(xp, yp);
53 TVector2
vec = ComputePocaToPointOnCircle2(x, y, xc, yc, R);
54 return TVector3(vec.X(), vec.Y(), 0.0);
63 double xi1, yi1, xi2, yi2;
64 ComputeLinePointOfTangenceOnACircle(m, xc, yc, R, xi1, yi1, xi2, yi2);
67 double xp = 999, yp = -999;
68 fabs(yi1 - (m * xi1 + q)) <
fabs(yi2 - (m * xi2 + q)) ? (xp = xi1, yp = yi1) : (xp = xi2 , yp = yi2);
70 return TVector2(xp, yp);
79 double xa, ya, xb, yb;
85 if((ex2.X() - ex1.X()) != 0) {
86 double m = (ex2.Y() - ex1.Y())/(ex2.X() - ex1.X());
87 double p = ex2.Y() - m * ex2.X();;
89 delta = - (m * xc + p - yc) * (m * xc + p - yc) + R * R * (m * m + 1);
91 if(delta < 0 || TMath::IsNaN(delta))
return 0;
92 xa = (-(m * (p - yc) - xc) +
sqrt(delta))/(m * m + 1);
94 xb = (-(m * (p - yc) - xc) -
sqrt(delta))/(m * m + 1);
101 delta = R * R - (ex1.X() - xc) * (ex1.X() - xc);
103 if(delta < 0 || TMath::IsNaN(delta))
return 0;
106 ya = yc +
sqrt(delta);
108 yb = yc -
sqrt(delta);
111 TVector2 int1(xa, ya);
112 TVector2 int2(xb, yb);
114 TVector2 distance11 = int1 - ex1;
115 TVector2 distance12 = int1 - ex2;
117 TVector2 distance21 = int2 - ex1;
118 TVector2 distance22 = int2 - ex2;
120 TVector2 length = ex1 - ex2;
124 if(distance11.Mod() < length.Mod() && distance12.Mod() < length.Mod()) {
129 intersection1 = int1;
132 if(distance22.Mod() < length.Mod() && distance21.Mod() < length.Mod()) {
136 if(found == 1) intersection2 = int2;
137 else intersection1 = int2;
142 if(delta == 0) found--;
150 TVector2 center(xc, yc);
151 TVector2 fromcentertoint = point - center;
152 TVector2 tangent(fromcentertoint.Y(), -fromcentertoint.X());
157 TVector2 tangent = ComputeTangentInPoint(xc, yc, point);
159 p = point.Y() - m * point.X();
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
friend F32vec4 fabs(const F32vec4 &a)