计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)
Posted
技术标签:
【中文标题】计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)【英文标题】:Calculate center coordinate of Subview on a circle in a UIView (inverted coordinate system) 【发布时间】:2014-05-12 23:24:28 【问题描述】:我想将 UIButton/UIView(红点)的中心定位在一个假想圆的边界上作为另一个 UIView 的子视图——这意味着坐标系是倒置的。
如何计算圆上红框中心的 CGPoint。这就是我所拥有的……
(CGPoint) circleCenter x,y (float) circleRadius r (float) angleAsRadian ⍺这就是我正在尝试的(感谢@rmaddy)
CGFloat buttonX = circleCenter.x + cos(angleAsRadian) * radius;
CGFloat buttonY = circleCenter.y - sin(angleAsRadian) * radius;
CGPoint buttonCenter = CGPointMake(buttonX, buttonY);
UIButton* buttonMarker = [[UIButton alloc]initWithFrame:CGRectMake(0,0, 20, 20)];
[buttonMarker addTarget:self action:@selector(showTitle:) forControlEvents:UIControlEventTouchUpInside];
[buttonMarker setBackgroundColor:[UIColor greenColor]];
[buttonMarker setCenter:buttonCenter];
[_view addSubview:buttonMarker];
...和当前结果:
我实际上希望绿色按钮位于粉红色圆圈的顶部。所以还不完全到那里。
价值观:
弧度 10.995574 弧度 12.042772【问题讨论】:
你知道一般如何计算中心的x和y吗?是否只是UIView
y 坐标的倒置让您失望?发布您迄今为止为解决此问题所做的工作。
是的,如前所述,我有圆心坐标、半径和角度。我缺少的是考虑倒坐标系的圆数学部分。
但是我问你是否知道如何在忽略倒置坐标系的情况下进行数学计算?如果这样做,请发布您迄今为止尝试过的内容。向您展示要解决的问题会容易得多。
一个圆的弧度为 2pi。为什么你的价值观这么大?结果看起来是镜像的。尝试减去 X 并添加 Y,而不是相反。
【参考方案1】:
导入<math.h>
并执行:
CGPoint circle = ... // the center of the circle
CGFloat angle = ... // the angle in radians
CGFloat radius = ...// the radius
CGFloat buttonX = circle.x + cos(angle) * radius;
CGFloat buttonY = circle.y - sin(angle) * radius;
CGPoint buttonCenter = CGPointMake(buttonX, buttonY);
如果您有角度单位,则需要将其转换为弧度。
【讨论】:
非常感谢。我很感激。我试过了。仍然没有按预期工作。查看我的更新结果。你的 buttonCenter 也应该是一个 CGPoint。以上是关于计算 UIView 中圆上 Subview 的中心坐标(倒坐标系)的主要内容,如果未能解决你的问题,请参考以下文章
给定一条射线和多边形,计算多边形内最大的圆,其中中心位于射线上,端点位于圆上