我用CGAffineTransform改造了一些UIView。现在我想知道在UIView中证明y值时是否有可能获得UIView的最小x点。
例如,在下图中,我想知道y值的最小x值,即视图高度的0.75。
someView.frame.origin.x仅提供左上角位置的x值,但我需要更改该位置以获取给定y值的最小x值。
答案 0 :(得分:1)
因为UIView总是一个矩形,我想你想跟踪给定y的最小x,只是对于矩形。
<强>解强>
你可以跟踪UIView的4个顶点的位置,总是你旋转它。只需将2x2旋转矩阵的点数相乘即可完成此跟踪。
| cosθ -senθ | | x | = | x * cosθ - y * senθ |
| senθ cosθ | | y | | x * senθ + y * cosθ |
然后,您可以获得最小 x 的顶点(我们称之为 V1 )。
然后你需要获得最小 x 的其他2个顶点(称为 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)替换给定的 y ,您得到 x =(y - b)/ a
希望有所帮助:)
答案 1 :(得分:1)
我假设您可以计算旋转方块上的最小X及其对应的Y ..然后,一旦知道方形旋转的角度和边长,则计算X2,Y2,如下图所示(它的毕达哥拉斯定理)..
我使用let rotatedRect = CGRectApplyAffineTransform(rotationTransformation, square.frame)
来获取旋转的矩形坐标。然后我比较了所有4个点,找到了具有最小X值的那个点和通过该点的正方形的两条线的方程(一个具有正斜率,另一个具有负斜率)。
如果你有X1,Y1和X2,Y2,X3,Y3,如下图所示,你可以通过替换或消除来计算两条线的拦截,如下所示。
为了简单起见,我假设通过正方形的线的斜率为0(水平线)。
要确定哪个是正确的最小X值,您可以比较X&gt; = X1。如果是,那是满足您要求的最低要求。见下面的例子......