FunctionCanvas.java
Dosyayı İndir
package com.godoro.samples.awt;
import java.awt.*;
public class FunctionCanvas extends Canvas
{
private Point origin = new Point(300, 300);
private int unit = 50;
private int axis = 500;
private int arrow = 5;
public double function(double x)
{
return 2 * Math.cos(x) + 3 * Math.sin(x);
}
public void paint(Graphics g)
{
drawXAxis(g);
drawYAxis(g);
drawFunction(g);
}
private void drawXAxis(Graphics g)
{
int xMin = origin.x - axis / 2;
int xMax = origin.x + axis / 2;
g.drawLine(xMin, origin.y, xMax, origin.y);
g.drawLine(xMin, origin.y, xMin + arrow, origin.y - arrow);
g.drawLine(xMin, origin.y, xMin + arrow, origin.y + arrow);
g.drawLine(xMax, origin.y, xMax - arrow, origin.y - arrow);
g.drawLine(xMax, origin.y, xMax - arrow, origin.y + arrow);
}
private void drawYAxis(Graphics g)
{
int yMin = origin.y - axis / 2;
int yMax = origin.y + axis / 2;
g.drawLine(origin.x, yMin, origin.x, yMax);
g.drawLine(origin.x, yMin, origin.x - arrow, yMin + arrow);
g.drawLine(origin.x, yMin, origin.x + arrow, yMin + arrow);
g.drawLine(origin.x, yMax, origin.x - arrow, yMax - arrow);
g.drawLine(origin.x, yMax, origin.x + arrow, yMax - arrow);
}
private void drawFunction(Graphics g)
{
double dx = 0.01;
double x1 = -3 * Math.PI / 2;
double y1 = function(x1);
for (double x2 = -3 * Math.PI / 2; x2 <= 3 * Math.PI / 2; x2 += dx) {
double y2 = function(x2);
int xScreen1 = (int) (origin.x + x1 * unit);
int yScreen1 = (int) (origin.y - y1 * unit);
int xScreen2 = (int) (origin.x + x2 * unit);
int yScreen2 = (int) (origin.y - y2 * unit);
g.drawLine(xScreen1, yScreen1, xScreen2, yScreen2);
x1 = x2;
y1 = y2;
}
}
public static void main(String[] args)
{
Frame frame = new Frame();
frame.setLayout(new BorderLayout());
frame.add(BorderLayout.CENTER, new FunctionCanvas());
frame.setBounds(0, 0, 600, 600);
frame.setVisible(true);
}
}
Dosyayı İndir