我用CGAffineTransform轉換了一些UIView。現在我想知道在UIView中驗證一些y值時是否有可能獲得UIView的最小x點。找到旋轉UIView給定y的最小x
例如在下圖中,我想知道y值的最小x值,該值是視圖高度的0.75倍。
someView.frame.origin.x只提供左上角位置的x值,但我需要的東西來改變這一立場得到一個給定的y值最小的x值。
我用CGAffineTransform轉換了一些UIView。現在我想知道在UIView中驗證一些y值時是否有可能獲得UIView的最小x點。找到旋轉UIView給定y的最小x
例如在下圖中,我想知道y值的最小x值,該值是視圖高度的0.75倍。
someView.frame.origin.x只提供左上角位置的x值,但我需要的東西來改變這一立場得到一個給定的y值最小的x值。
我認爲你可以計算出在羅塔最小X和其對應的Y然後計算出X2,Y2,如下圖所示,一旦你知道方角已經旋轉的角度和其邊長(然後是它的畢達哥拉斯定理)..
我用let rotatedRect = CGRectApplyAffineTransform(rotationTransformation, square.frame)
得到旋轉矩形的座標。然後,我比較了所有4個點,找出X值最小的那個點,以及經過該點的正方形的兩條線的方程(一個具有正斜率,另一個具有負值)。
一旦有了X1,Y1和X2,Y2,X3,Y3,如下所示,就可以計算出的兩條線由取代或消除截取如下所示..
爲簡單起見,我假定通過正方形的直線的斜率爲0(水平線)。
要找出哪個是正確的最小X值,比較是否X> = X1。如果是,那是滿足您要求的最低限度。看下面的例子..
注意:如果SQUARE的旋轉角度是0,90,180或360,那麼最小的X是X1,因爲基本上沒有旋轉。 – Brandon
Woa ...非常感謝! –
作爲UIView總是一個矩形,我想你想跟蹤矩形的給定y的最小x。
SOLUTION
可以跟蹤4個頂點了UIView的總是你旋轉它的位置。這種跟蹤可以簡單地通過乘以2x2旋轉矩陣的點來完成。
| cosθ -senθ | | x | = | x * cosθ - y * senθ |
| senθ cosθ | | y | | x * senθ + y * cosθ |
然後,你可以用最小的X頂點(可以稱之爲V1)。
,那麼你需要讓其他2個頂點與最小X(稱爲V2和V3)。
if V1.y > (given y)
write linear equation from V1 to vertex with minimum y between V2 and V3
else
write linear equation from V1 to vertex with maximum y between V2 and V3
到底
,你將有F(X)= AX + B
取代指定Ÿ爲F(X),你會得到X =(Y - B )/一個
希望幫助:)
你知道在給定y值的那個平方中有許多x值。或者兩個,如果你只關心外圍。 – rmaddy
@rmaddy你是什麼意思?對於給定的y,x怎麼能有多個x值?我想要最小的x位置,如果這就是你的意思。 –
在給定的y值下,在你的視圖上畫一條水平線。注意這條線是如何穿過正方形的。它穿過左側,再次穿過右側。你也可以考慮廣場內的所有點。如果您的目標是計算給定y的最左側x值,請在您的問題中提及。 – rmaddy