/** * 根據圓心的坐標點、半徑、當前手勢所在的坐標點,計算出圓的運動軌跡坐標 * @param radius 圓心半徑 * @param centerCircle 圓心的坐標點 * @param currentPoint 當前的手勢所在的坐標點 * @return CGPoint 返回圓的坐標 */ +(CGPoint)CirclePoint:(CGFloat)radius withCenterCircle:(CGPoint)centerCircle withCurrentPoint:(CGPoint)currentPoint; +(CGPoint)CirclePoint:(CGFloat)radius withCenterCircle:(CGPoint)centerCircle withCurrentPoint:(CGPoint)currentPoint { CGPoint cPoint; CGFloat x = currentPoint.x; CGFloat y = currentPoint.y; CGFloat cX ; //圓的X坐標軌跡 CGFloat cY ; //圓的Y坐標軌跡 CGFloat daX; // 圓心到轉動按鈕的距離的平方 //CGFloat daY; CGFloat aX; // 圓心到轉動按鈕的距離 //CGFloat aY; CGFloat cosX; // 圓心水平方向與轉動按鈕形成的夾角的cos值 //圓心與觸控點的距離的平方(勾股定理) daX = (x - centerCircle.x)*(x - centerCircle.x) + (y - centerCircle.y)*(y - centerCircle.y); aX = sqrt(daX); //開根號 //圓心與觸控點的距離 cosX = fabs(x - centerCircle.x)/aX; //絕對值 cX = cosX*radius ; // x =R * cosX; 圓心到觸控點在水平坐標的X的值 cY = sqrt(radius*radius - cX*cX); if(x<centerCircle.x) //如果X所在的點小於圓心 在圓心的左邊 { cX = centerCircle.x - cX; } else { cX = centerCircle.x + cX; } if(y<centerCircle.y) { cY = centerCircle.y - cY; } else { cY = centerCircle.y + cY; } cPoint.x = cX; cPoint.y = cY; return cPoint; }