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

时间:2018-03-06 09:33:53

标签: java math

我试图在所有圆形表面上绘制线条,我当前的形状如下:

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

3 个答案:

答案 0 :(得分: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 :(得分: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))); 
}

答案 2 :(得分: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;
 }