我有两个CGPoints A和B.可以使用ccpDistance(A,B)找到A和B之间的距离。
有了这些信息,我需要通过在A-B距离上加一小距离来编程找到X的CGPoint(x,y)。 A-B可以在水平,垂直,对角线或任何方向上形成连接线。目的是扩展虚线并在其末尾找到一个点。
可以在Box2D for iOS中使用吗?如果是,那怎么样?
X Y X
/ . \
/ . \
B .B
/ \
/ \
/ \
/ \
A A
答案 0 :(得分:1)
使用以下功能(将其放入.h
个文件中):
static inline CGPoint
ccpLineExtend(const CGPoint v1, const CGPoint v2, const CGFloat extension)
{
double angle = atan2(v2.y - v1.y, v2.x - v1.x);
return ccp(v2.x + extension * cos(angle), v2.y + extension * sin(angle));
}
答案 1 :(得分:1)
我建议使用以下方法,不使用任何三角函数。我想它比Lukman的建议更快,但我没有测量时间。
static inline CGPoint ccpLineExtend(const CGPoint from, const CGPoint to, const CGFloat factor)
{
return CGPointMake(from.x + factor * (to.x - from.x), from.y + factor * (to.y - from.y));
}
factor = 1.0
表示结果点等于点to
。 factor = 2.0
表示结果点与from
的距离是to
的两倍。
答案 2 :(得分:0)
@Lars的回答对我来说是最好和最简单的。这是Swift 4版本:
let newPoint = CGPoint(x: origin.x + factor * (end.x - origin.x), y: origin.y + factor * (end.y - origin.y))
如果您具有当前距离,则可以通过以下方法对其进行加减或更改:
let factor = newDistance/currentDistance
对于我来说,我有一个使用扩展名的从CGPoint到CGPoint的距离计算器:
extension CGPoint {
func distance(to point: CGPoint) -> CGFloat {
let x = self.x - point.x
let y = self.y - point.y
return sqrt(pow(x, 2) + pow(y, 2))
}
}