我试图在所有圆形表面上绘制线条,我当前的形状如下:
我的错误尝试:
for (int i = 0; i < 24; i++) {
g.drawLine(xCenter - clockRadius + i , yCenter - clockRadius + i, xCenter - clockRadius + i + 5,
yCenter - clockRadius + i + 5);
}
我试图画一个完整的时钟:
答案 0 :(得分:3)
你正在寻找cosinus和鼻窦。
您的时钟是一个圆圈,您可以轻松地将您的步骤转换为该圆圈上的度数。如果你想要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带有半径的天使。
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;
}