假设我知道中心点、矩形大小和角度(从0度开始为东,逆时针穿过90度为北,180度为西,270度为南,360度为东),我需要知道相交点的坐标。
在Finding points on a rectangle at a given angle中给出了某种令人困惑但可能准确的数学答案。该答案引导我尝试以下代码,但它无法正常工作。这个问题与那个问题类似,但我正在寻找一个经过更正的Objective-C/iOS方法,而不是一般的数学响应。
我认为代码问题的一部分与使用单个0到360度角度(以弧度表示,没有负数可能性)有关,但可能会存在其他问题。下面的代码主要使用在belisarius的回答中定义的符号,包括我的尝试计算定义在那里的每个区域的相交点。
这个代码在我的UIImageView子类中:
- (CGPoint) startingPointGivenAngleInDegrees:(double)angle {
double angleInRads = angle/180.0*M_PI;
float height = self.frame.size.height;
float width = self.frame.size.width;
float x0 = self.center.x;
float y0 = self.center.y;
// region 1
if (angleInRads >= -atan2(height, width) && angleInRads <= atan2(height, width)) {
return CGPointMake(x0 + width/2, y0 + width/2 * tan(angleInRads));
}
// region 2
if (angleInRads >= atan2(height, width) && angleInRads <= M_PI - atan2(height, width)) {
return CGPointMake(x0 + height / (2*tan(angleInRads)),y0+height/2);
}
// region 3
if (angleInRads >= M_PI - atan2(height, width) && angleInRads <= M_PI + atan2(height, width)) {
return CGPointMake(x0 - width/2, y0 + width/2 * tan(angleInRads));
}
// region 4
return CGPointMake(x0 + height / (2*tan(angleInRads)),y0-height/2);
}