首页 > 解决方案 > 如何计算圆上半部分的点

问题描述

我正在尝试将一些图标平均放置在圆圈的上半部分。

我设法使用以下公式/代码将它们围绕一个完整的圆圈

for(int i=0;i<numberOfItems;i++)
{
    float x = (float)(center.X + radius * Math.Cos(2 * Math.PI * i / numberOfItems))-iconBmp.Width/2;
    float y = (float)(center.Y + radius * Math.Sin(2 * Math.PI * i/ numberOfItems))-iconBmp.Height/2;

    canvas.DrawBitmap(iconBmp, new SKPoint(x, y));
}

但我不知道如何只为圆圈的上半部分做这件事?是否也有一个公式?我有一种感觉,我为整个圈子所拥有的人只需要一些调整来实现这一点……但不知道是什么。

已经谢谢你了!

标签: c#geometry

解决方案


这更像是一个数学问题而不是编程问题。

2pi 弧度 = 360 度

因此,如果您希望显示所有项目,但形状为半圆形,则使用:

Math.PI * i / numberOfItems代替2 * Math.PI * i / numberOfItems

也因为屏幕坐标从左上角开始。这将使它成为圆圈的下半部分,右边的第一项。如果你想要圆圈的上半部分,左边的第一项,那么只需添加 pi:

Math.PI + (Math.PI * i / numberOfItems)

整个代码:

for(int i=0;i<numberOfItems;i++)
{
    float x = (float)(center.X + radius * Math.Cos(Math.PI + (Math.PI * i / numberOfItems)))-iconBmp.Width/2;
    float y = (float)(center.Y + radius * Math.Sin(Math.PI + (Math.PI * i / numberOfItems)))-iconBmp.Height/2;

    canvas.DrawBitmap(iconBmp, new SKPoint(x, y));
}

推荐阅读