19,464
社区成员
发帖
与我相关
我的任务
分享PointF FGetPT( PointF s, PointF e, double r )
{
PointF ap; double xx; double yy; double x1; double x2; double y1; double y2; double k; double b;
if( s.X != e.X ){
k = ( s.Y - e.Y ) / ( s.X - e.X ); b = s.Y - k * s.X;
double A = k * k + 1; double B = 2 * b * k - 2 * s.Y * k - 2 * s.X; double C = s.X * s.X + ( b - s.Y ) * ( b - s.Y ) - r * r;
x1 = ( -1 * B - sqrt( B * B - 4 * A * C ) ) / A / 2; x2 = ( -1 * B + sqrt( B * B - 4 * A * C ) ) / A / 2;
y1 = k * x1 + b; y2 = k * x2 + b;
}else{ x1 = s.X; x2 = s.X; y1 = s.Y + r; y2 = s.Y - r; }
if( ( ( x1- e.X ) * ( x1 - e.X ) + ( y1 - e.Y ) * ( y1 - e.Y ) ) > ( ( x2 - e.X ) * ( x2 - e.X ) + ( y2 - e.Y ) * ( y2- e.Y ) ) ) { xx = x2; yy = y2; }else{ xx = x1; yy = y1; }
ap.X = REAL( xx ); ap.Y = REAL( yy ); return ap;
}
float dx,dy,l;
dx = x2 - x1;
dy = y2 - y1;
l = sqrt(dx*dx + dy*dy);
x = x1 + a/l * dx;
y = y1 + a/l * dy;