我想画一个蝶形线使用Java
。
这是上述曲线的参数方程:
根据我在大学时的记忆,绘制参数方程的方法Java是下一个:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.translate(300,300);
int x1,y1;
int x0 = 0;
int y0 = (int)(Math.E-2); //for x = 0, we get y = Math.E - 2
int nPoints = 1000;
g2.scale(30,-30);
for(int i=0;i<nPoints;i++) {
double t= 12*i*Math.PI/nPoints; //to make it between 0 and 12*PI.
x1=(int)(Math.sin(t)*(Math.pow(Math.E,Math.cos(t))-2*Math.cos(4*t)-Math.pow(Math.sin(t/12),5)));
y1 = (int)(Math.cos(t)*(Math.pow(Math.E,Math.cos(t))-2*Math.cos(4*t)-Math.pow(Math.sin(t/12),5)));
g2.drawLine(x0,y0,x1,y1);
x0=x1;
y0=y1;
}
}
现在,这给了我下一个结果:
好吧,这与预期的结果相差甚远。
然后我决定尝试一下,Line2D.Double认为这会提供更准确的绘图。
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.translate(300,300);
double x1,y1;
double x0 = 0;
int nPoints = 500;
g2.scale(30,-30);
double y0 = Math.E-2;
for(int i=0;i<nPoints;i++) {
double t= 12*i*Math.PI/nPoints;
x1=(Math.sin(t)*(Math.pow(Math.E,Math.cos(t))-2*Math.cos(4*t)-Math.pow(Math.sin(t/12),5)));
y1 = (Math.cos(t)*(Math.pow(Math.E,Math.cos(t))-2*Math.cos(4*t)-Math.pow(Math.sin(t/12),5)));
g2.draw(new Line2D.Double(x0,y0,x1,y1));
x0=x1;
y0=y1;
}
}
这产生了下一个结果:
好的,这肯定看起来更好,但肯定不是预期的结果。
因此我问,有没有办法使用这个参数方程绘制最准确的曲线Java
?
它不必像上图那样 100% 看起来,而是最接近的。
鸿蒙传说
相关分类