如何获得圆形表面的(x,y)?

问题描述 投票:1回答:3

我正在尝试在所有圆形表面上画线,我当前的形状看起来像:

enter image description here

我的错误尝试:

    for (int i = 0; i < 24; i++) {
        g.drawLine(xCenter - clockRadius + i , yCenter - clockRadius + i, xCenter - clockRadius + i + 5,
                yCenter - clockRadius + i + 5);
    }

我想画一个完整的时钟:

enter image description here

java math
3个回答
3
投票

你正在寻找cosinus和鼻窦。

circle with cos and sin

您的时钟是一个圆圈,您可以轻松地将您的步骤转换为该圆圈上的度数。如果你想要24步,12将是180°(或π),24将是360°,或2π。因此,要获得每个索引的正确角度,只需将2π(360°)除以24并将其乘以当前索引。然后将得到的角度输入cos和sin函数,它们分别给出x和y坐标:

double x = Math.cos(2 * Math.PI / 24 * i);
double y = Math.sin(2 * Math.PI / 24 * i);

当然,您可以将2和24优化为一个在某处定义的常量,然后在代码中使用。


1
投票

我怀疑你想绘制小段 - 刻度,以圆周为中心并从圆心指向。在这种情况下使用三角测量相似的时针绘图。

for (int i = 0; i < 24; i++) {
   double ang = i * Math.Pi / 12;
   g.drawLine((int) (xCenter + (clockRadius - 5) * Math.Cos(ang)), 
             (int) (yCenter + (clockRadius - 5) * Math.Sin(ang)), 
             (int) (xCenter + (clockRadius + 5) * Math.Cos(ang)), 
             (int) (yCenter + (clockRadius + 5) * Math.Sin(ang))); 
}

0
投票

您需要计算360度以上的点而不仅仅是24,所以你有半径和天使旋转(天使旋转从0到360)以获得(x,y)的正确点我们需要将天使的sin或cos乘以半径。

enter image description here

for (int i = 0; i < 360; i++) {
        int x = (int) (clockRadius * Math.cos(i)) + xCenter;
        int y = (int) (clockRadius * Math.sin(i)) + yCenter;
        g.drawLine(x, y, x + 5, y + 5);
    }

注意:为了获得更好的结果,您可能需要开发两个循环,一个用于右(180)部分,另一个用于左(180)部分。

编辑:为了获得正确的方向,你需要检查天使,例如:

int xV = 0, yV = 0;
if (i <= 90){
   xV = 5;
   yV = 5;
 }
© www.soinside.com 2019 - 2024. All rights reserved.