绘制一个五角星中,五个角的坐标代码问题

jiugui 2014-10-09 12:27:00
我在绘制一个五角星,但是对其中确定五个角的代码理解不了,求大家帮忙解答下,代码如下,加粗部分就是确定五个角坐标的代码,另外就是想问下,为什么要进行坐标变换,原点设成(200,200)?
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class MyCanvas extends Canvas
{ static int pointX[]=new int[5],pointY[]=new int[5];
public void paint(Graphics g)
{
g.translate(200,200); //进行坐标变换,将新的坐标原点设置为(200,200)。
pointX[0]=0;
pointY[0]=120;
double arcAngle=(72*Math.PI)/180;
for(int i=1;i<5;i++)
{
pointX[i]=(int)(pointX[i-1]*Math.cos(arcAngle)-pointY[i-1]*Math.sin(arcAngle));
pointY[i]=(int)(pointY[i-1]*Math.cos(arcAngle)+pointX[i-1]*Math.sin(arcAngle));

}
g.setColor(Color.red);
int starX[]={pointX[0],pointX[2],pointX[4],pointX[1],pointX[3],pointX[0]};
int starY[]={pointY[0],pointY[2],pointY[4],pointY[1],pointY[3],pointY[0]};
g.drawPolygon(starX,starY,6);
}
public static void main(String args[])
{
Frame f=new Frame();
f.setSize(500,450);
f.setVisible(true);
MyCanvas canvas=new MyCanvas();
f.add(canvas,"Center");
f.validate();
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
PrintJob p=f.getToolkit().getPrintJob(f,"ok",null);
Graphics gr=p.getGraphics();
int starX[]={pointX[0]+125,pointX[2]+125,pointX[4]+125,pointX[1]+125,pointX[3]+125,pointX[0]+125};
int starY[]={pointY[0]+125,pointY[2]+125,pointY[4]+125,pointY[1]+125,pointY[3]+125,pointY[0]+125};
gr.drawPolygon(starX,starY,6);
p.end();
}
}
...全文
423 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯癫行者 2014-10-09
  • 打赏
  • 举报
回复
原点设成200,200是设定五角星的中心坐标位置,如果直接使用0,0为原点,画出的五角星就只有右下角的1/4,不完整,因为0,0在MyCanvas的左上角。
疯癫行者 2014-10-09
  • 打赏
  • 举报
回复
回答后面的问题,五角星用极坐标计算比较容易,计算后再转换成直角坐标。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧