java clock函数_java 小时钟,怎么理解用数学函数求指针端点坐标

博客介绍了角度deg转弧度rad的方法,包括手动计算和Java封装方法。还给出根据弧度计算圆周上点坐标的公式,对时钟坐标计算代码进行简化。此外,针对时钟效果的锯齿现象,提供了修改paintComponent方法以消除图像和文本锯齿的方案。

展开全部

角度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);

9de7dd8b389b77935e30d1a711f6812b.png

其他细节:

时钟的效果有严重的锯齿现象, 如下图

585d1913cd3845677edf7f507df89d8f.png

修改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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值