展开全部
角度deg转弧度rad的方法如下
rad = deg/ 180.0 * 3.1415926;
java里封装好的方法是
rad=Math.toRadians(deg);
已知 圆心是 x,y ,半径是r ,弧度是rad 根据弧度计算圆636f70793231313335323631343130323136353331333365643033周上点的坐标的方法如果是正东方向,作为0度 起点,计算公式如下double x1 = x + cos(rad)*r;
double y1 = y + sin(rad)*r;如果是正北方向,作为0度的起点, 计算公式如下
[*说明,时钟就是以正北方向作为0度起点来计算度数的]
第一种写法double x1 = x + sin(rad)*r;
double y1 = y - cos(rad)*r;
第二种写法double x1 = x + sin(rad)*r;
double y1 = y + cos(rad+3.14159265358979323846)*r;
但是明显第一种写法更优雅一点 .
所以下面的代码,就可以简化修改hx=r1*Math.sin(hdeg)+x;
hy=r1*Math.cos(hdeg+Math.PI)+y;
mx=r2*Math.sin(mdeg)+x;
my=r2*Math.cos(mdeg+Math.PI)+y;
sx=r3*Math.sin(sdeg)+x;
sy=r3*Math.cos(sdeg+Math.PI)+y;
建议修改成hx = x + r1 * Math.sin(hdeg);
hy = y - r1 * Math.cos(hdeg);
mx = x + r2 * Math.sin(mdeg);
my = y - r2 * Math.cos(mdeg);
sx = x + r3 * Math.sin(sdeg);
sy = y - r3 * Math.cos(sdeg);

其他细节:
时钟的效果有严重的锯齿现象, 如下图

修改paintComponent 方法即可public void paintComponent(Graphics g) {
super.paintComponent(g);
// 把g转成g2d对象
Graphics2D g2d = (Graphics2D) g;
//消除图像锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//消除文本锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//设置字体格式
g2d.setFont(new Font("宋体",Font.BOLD,18));
//开始绘制
g2d.clearRect(0, 0, 500, 500);
g2d.drawString("我的简易时钟", 210, 50);
g2d.drawString("12", 245, 135);
g2d.drawString("3", 355, 250);
g2d.drawString("6", 245, 365);
g2d.drawString("9", 125, 250);
g2d.drawOval(120, 120, 250, 250);
g2d.drawLine(x, y, (int) hx, (int) hy);
g2d.drawLine(x, y, (int) mx, (int) my);
g2d.drawLine(x, y, (int) sx, (int) sy);
}
博客介绍了角度deg转弧度rad的方法,包括手动计算和Java封装方法。还给出根据弧度计算圆周上点坐标的公式,对时钟坐标计算代码进行简化。此外,针对时钟效果的锯齿现象,提供了修改paintComponent方法以消除图像和文本锯齿的方案。
791

被折叠的 条评论
为什么被折叠?



