在iOS中,我試圖確定矩形上的點,該矩形與從中心點到外圍的虛線相交該矩形以預定的角度。假設我知道中心點,矩形的大小和角度(從東經0度開始,再向東逆時針經過90度,向東逆時針經過90度,向西逆時針經過90度,向西逆時針旋轉180度) 。我需要知道交點的座標。從中心點以給定角度與直線相交的UIView矩形上找到CGPoint
對Finding points on a rectangle at a given angle有點困惑(對我來說)數學的,但大概是準確的答案讓我嘗試下面的代碼,但它不能正常工作。這個問題與此類似,但我正在尋找一種修正的Objective-C/iOS方法,而不是一般的數學方法。
我認爲代碼問題的一部分與使用單個0到360度角(弧度不可能有負數)輸入有關,但可能還有其他問題。下面的代碼主要使用the answer from 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);
}
超讚!謝謝。我有一些麻煩,因爲在我的情況下,我沒有意識到我必須在我的UIImageview子類(對於來這裏的其他新手)中使用[self.superview convertPoint:thePoint toView:self]。 – 2012-03-03 15:08:48
夢幻般的答案! – mrvincenzo 2013-07-12 09:53:16
我正在學習你的代碼,這是非常好的,試圖理解如果我想旋轉圖像,並仍然保持邊緣檢測怎麼辦?有什麼想法嗎? – flooie 2015-07-24 14:56:51