好的,我在自己的应用程序中做了同样的事情。
我做的让它更容易的技巧是有一个函数来计算线的“unitVector”。
即基于线长1的线中的矢量变化。
它只是使用简单的毕达哥拉斯......
- (CGSize)unitVectorFromPoint:(CGPoint)start toPoint:(CGPoint)end
{
//distance between start an end
float dX = end.x - start.x;
float dY = end.y - start.y;
float distance = sqrtf(dX * dX + dY * dY); // simple pythagorus
//unit vector is just the difference divided by the distance
CGSize unitVector = CGSizeMake(dX/distance, dY/distance);
return unitVector;
}
注意......开始和结束的哪一种方式并不重要,因为数字的平方只会给出正值。
现在您可以使用此向量到达两点(圆心和目标)之间的直线上的任何点。
所以,这条线的开始是......
CGPoint center = // center of circle
CGPoint target = // target
float radius = //radius of circle
float dX = center.x - target.x;
float dY = center.y - target.y;
float distance = sqrtf(dX * dX + dY * dY);
CGSize unitVector = [self unitVectorFromPoint:center toPoint:target];
CGPoint startOfLaser = CGPointMake(center.x + unitVector.x * radius, center.y + unitVector.y * radius).
CGPoint midPointOfLaser = CGPointMake(center.x + unitVecotr.x * distance * 0.5, center.y + unitVector.y * distance * 0.5);
这只是将单位矢量乘以您想要到达该距离线上的点的距离(半径)。
希望这会有所帮助:D
如果您想要两点之间的中点,那么您只需将“半径”更改为您要计算的距离,它将为您提供中点。(等等)。