CodeYoung7 2015-03-18 08:13 采纳率: 0%
浏览 616

求解以下代码的绘图思想

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
// Graphics2D g3 = (Graphics2D) g;
drawCoordinate(g2);
Line2D line;
// Line2D li;
g2.setColor(Color.BLACK);
g2.drawString("(" + (pt.x - 300) + ", " + (300 - pt.y) + ")",
pt.x + 20, pt.y + 20);
switch(flag)
{
case 0:
//drawString方法:使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
//最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。
g2.drawString("y = Apow(Bx + C, 1) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01){
line = new Line2D.Double(i, i,
i + 1, i + 1);
g2.draw(line);
}
break;
case 1:
g2.drawString("y = Apow(Bx + C, 2) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
//Double方法标识x、y坐标的起始位置
line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 2) * w_times,
i + 1, dy - Math.pow(getReal_X(i + 1), 2) * w_times);
//pow(double i,double j)方法:返回第一个参数的第二个参数次幂的值。
//draw(shape s)方法:使用当前 Graphics2D 上下文的设置勾画 Shape 的轮廓。
g2.draw(line);
}
break;
case 2:
g2.drawString("y = Apow(Bx + C, 3) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 3) * w_times,
i + 1, dy - Math.pow(getReal_X(i + 1), 3) * w_times);
g2.draw(line);
}
break;
case 3:
g2.drawString("y = Alog(Bx + C) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.log(getReal_X(i)) * w_times,
i + 1, dy - Math.log(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 4:
g2.drawString("y = Apow(2, Bx + C) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.pow(2, getReal_X(i)) * w_times,
i + 1, dy - Math.pow(2, getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 5:
g2.drawString("y = Asqrt(Bx + C) + D", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.sqrt(getReal_X(i)) * w_times,
i + 1, dy - Math.sqrt(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
/* case 8:
g2.drawString("y = a(sita)", 105, 60);
for(double i = 0; i < 600; i += 0.01)
{
line = new Line2D.Double(getReal_X(i) * Math.cos(getReal_X(i)),
dy - getReal_X(i) * Math.sin(getReal_X(i)) * w_times,
getReal_X(i) * Math.cos(getReal_X(i + 1)),
dy - getReal_X(i) * Math.sin(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;*/
}
if(flag != -1)
{
g2.drawString("A = " + w_times, 105, 90);
g2.drawString("B= " + h_times, 105, 120);
g2.drawString("C= " + (300 - dx), 105, 150);
g2.drawString("D= " + (300 - dy), 105, 180);
}
}
private double getReal_X(double x)
{
return (x - dx) * h_times;
}
private void drawCoordinate(Graphics2D g2)
{
int len = 20;
Line2D line;
for(int i = 0; i <= 600 / len; i++)
{
g2.setColor(Color.PINK.darker());
if(i == 300 / len)
g2.setColor(Color.RED);
else;
line = new Line2D.Double(0, i * len, 600, i * len);
g2.draw(line);
line = new Line2D.Double(i * len, 0, i * len, 600);
g2.draw(line);
}
drawPoint(g2, 300, 300);
}

private void drawPoint(Graphics2D g2, double x, double y)
{
g2.setColor(Color.YELLOW);
Ellipse2D circle = new Ellipse2D.Double(x - 2, y - 2, 4, 4);
g2.fill(circle);
}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料