ios - 在圆上放置相同距离的点总是从同一点开始

标签 ios math

我已经知道如何将相同距离的点放在圆的顶部:

double slice = 2 * M_PI / [icons count];    
for (int i = 0; i < [icons count]; i++)
{
    double angle = slice * i;
    int newX = (int)(cen.x + rad * cos(angle));
    int newY = (int)(cen.y + rad * sin(angle));
    CGPoint point = CGPointMake(newX, newY);
}

根据数组中元素的数量,点的位置总是不同(当然),但我如何设法将第一个点始终放在圆上的同一位置,例如在圆的最高点?

最佳答案

为您的角度添加一个常数值。这些点应该从原点的右侧开始(在标准笛卡尔坐标中,0,0 位于中心,X 和 Y 向右和向上增加。)

要将第一个点移到顶部,请将 pi/2 添加到您的角度。

看起来您正在使用 iOS 坐标,其中 0,0 位于屏幕的左上角,Y 向下增加,这会翻转 X 轴上的正常笛卡尔坐标。因此,您需要从角度中减去 pi/2:

double slice = 2 * M_PI / [icons count];    
for (int i = 0; i < [icons count]; i++)
{
    double angle = slice * i - M_PI_2;
    int newX = (int)(cen.x + rad * cos(angle));
    int newY = (int)(cen.y + rad * sin(angle));
    CGPoint point = CGPointMake(newX, newY);
}

关于ios - 在圆上放置相同距离的点总是从同一点开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562644/

相关文章:

objective-c - 从 url 加载 .plist 文件

ios - 可执行文件在 Xcode 中使用无效权利进行签名

ios - 图像未按正确顺序附加

math - 如何将纬度/经度映射到扭曲的 map ?

python - 使用泰勒级数加速计算

php - ios将数据存入MySQL数据库简单

objective-c - 从具有属性的 NSObject 转换为 NSDictionary 的 Obj-C 简单方法?

Javascript - 奇怪的数学输出

c++ - 优化针孔相机渲染系统

php - 如何计算一年是否有53周