how to draw a circle in a diagonal line in java?
I have a diagonal line starting from the left bottom part of the screen going to the upper right part of the screen. Now I want to draw a circle to the line h开发者_JAVA技巧aving 100 meters in distance starting from the left bottom part going to the upper right part and that is my problem. Could you give me some ideas about this matter?
Any help would be much appreciated...
Here's the code :
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setBackground(Color.white);
int x0_pixel = 0;
int y0_pixel = 0;
int x1_pixel = getWidth();
int y1_pixel = getHeight();
int x0_world = 0;
int y0_world = 0;
double x1_world = 2000; // meters
double y1_world = 1125; // meters
double x_ratio = (double) x1_pixel / x1_world;
double y_ratio = (double) y1_pixel / y1_world;
int xFrom = 0;
int yFrom = 0;
double xTo = x1_world;
double yTo = y1_world;
int FromX_pixel = convertToPixelX(xFrom, x_ratio);
int FromY_pixel = convertToPixelY(y1_pixel, yFrom, y_ratio);
int ToX_pixel = convertToPixelX((int) xTo, x_ratio);
int ToY_pixel = convertToPixelY(y1_pixel, (int) yTo, y_ratio);
g2d.setColor(Color.RED);
g2d.drawLine(FromX_pixel, FromY_pixel, ToX_pixel, ToY_pixel);
double theta = Math.atan(yTo / xTo);
double len = (int) Math.sqrt(xTo * xTo + yTo * yTo);
int interval = 100;
for (int distance = xFrom; distance < len; distance += interval)
{
double distance_x = (int) Math.cos(theta * distance);
double distance_y = (int) Math.sin(theta * distance);
int x_circle_pixel = convertToPixelCircleX(FromX_pixel, distance_x);
int y_circle_pixel = convertToPixelCircleY(y1_pixel, distance_y, y_ratio);
g2d.drawOval(x_circle_pixel, y_circle_pixel, 10, 10);
}
Toolkit.getDefaultToolkit().sync();
g2d.dispose();
}
private static int convertToPixelY(int y_offset, int y_world, double y_ratio)
{
return (int) (y_offset - (y_world * y_ratio));
}
private static int convertToPixelX(int x_world, double ratio)
{
return (int) (x_world * ratio);
}
private static int convertToPixelCircleY(int y_offset, double distance, double y_ratio)
{
return (int) (y_offset - (distance * y_ratio));
}
private static int convertToPixelCircleX(int x_world, double distance_x)
{
return (int) (x_world * distance_x);
}
Look at your FOR section, I believe that that's where the error is.
final double cosTheta = Math.cos(theta);
final double sinTheta = Math.sin(theta);
for (int distance = xFrom; distance < len; distance += interval) {
double distance_x = distance * cosTheta;
double distance_y = distance * sinTheta;
//int x_circle_pixel = convertToPixelCircleX(FromX_pixel, distance_x);
//int y_circle_pixel = convertToPixelCircleY(y1_pixel, distance_y, y_ratio);
int x_circle_pixel = convertToPixelX((int) distance_x, x_ratio);
int y_circle_pixel = convertToPixelY(y1_pixel, (int) distance_y, y_ratio);
g2d.drawOval(x_circle_pixel, y_circle_pixel, 10, 10);
}
精彩评论