Results 1 to 1 of 1
- 07-02-2010, 01:54 PM #1
Senior Member
- Join Date
- Apr 2010
- Location
- Belgrade, Serbia
- Posts
- 278
- Rep Power
- 4
Cartesian coordinate system (X > 0, Y>0)
Hi. I have written PositiveCartesian class. It is very flexibile and easy for drawing cartesian coordinate system.
We can define position of cartesian on panel, names of axis, numbers on axis, size of cartesian in pixels,...
It may be useful for someone, so I want to share my code here:
class: PositiveCartesian.java
Java Code:import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; public class PositiveCartesian { int firstAxisLength; int secondAxisLength; String firstName; String secondName; int numberOfFirstCoordNumbers; int numberOfSecondCoordNumbers; double numbersDistanceFromCartesian; int distanceOfCartesianFromPanelXCoord; int distanceOfCartesianFromPanelYCoord; int numberOfPixelsByNumber; boolean populateWithAdditionalNumbers = false; public static final int FIRST_LENGHT = 10; public static final int SECOND_LENGHT = 5; // size of start coordinate lenght public static final int ORIGIN_COORDINATE_RADIUS = 6; // distance of strings (numbers) from cartesian coordiante system public static final int STRING_DISTANCE_FROM_CARTESIAN = 20; public PositiveCartesian(int firstAxisLength, int secondAxisLength) { this.firstAxisLength = firstAxisLength; this.secondAxisLength = secondAxisLength; firstName = "X"; secondName = "Y"; numberOfFirstCoordNumbers = 10; numberOfSecondCoordNumbers = 10; numbersDistanceFromCartesian = 20; distanceOfCartesianFromPanelXCoord = 50; distanceOfCartesianFromPanelYCoord = 50; } public void drawCartesian(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // we are setting default distance of cartesian from panel and that is 50px width, 50px height setDistanceOfCartesianFromPanel(distanceOfCartesianFromPanelXCoord, distanceOfCartesianFromPanelYCoord); // x-axis g2.drawLine((int)distanceOfCartesianFromPanelXCoord, (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength), (int)(distanceOfCartesianFromPanelXCoord + firstAxisLength), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength)); // y-axis g2.drawLine((int)distanceOfCartesianFromPanelXCoord, (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength), (int)distanceOfCartesianFromPanelXCoord, (int)distanceOfCartesianFromPanelYCoord); // x-axis arrow g2.drawLine((int)(distanceOfCartesianFromPanelXCoord + firstAxisLength - FIRST_LENGHT), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength - SECOND_LENGHT), (int)(distanceOfCartesianFromPanelXCoord + firstAxisLength), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength)); g2.drawLine((int)(distanceOfCartesianFromPanelXCoord + firstAxisLength - FIRST_LENGHT), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + SECOND_LENGHT), (int)(distanceOfCartesianFromPanelXCoord + firstAxisLength), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength)); // y-axis arrow g2.drawLine((int)(distanceOfCartesianFromPanelXCoord - SECOND_LENGHT), (int)(distanceOfCartesianFromPanelYCoord + FIRST_LENGHT), (int)distanceOfCartesianFromPanelXCoord, (int)distanceOfCartesianFromPanelYCoord); g2.drawLine((int)(distanceOfCartesianFromPanelXCoord + SECOND_LENGHT), (int)(distanceOfCartesianFromPanelYCoord + FIRST_LENGHT), (int)distanceOfCartesianFromPanelXCoord, (int)distanceOfCartesianFromPanelYCoord); // coordinate origin point g2.fillOval((int)(distanceOfCartesianFromPanelXCoord - (ORIGIN_COORDINATE_RADIUS / 2)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength - (ORIGIN_COORDINATE_RADIUS / 2)), ORIGIN_COORDINATE_RADIUS, ORIGIN_COORDINATE_RADIUS); // draw names of axis and origin point g2.drawString("X", (int)(distanceOfCartesianFromPanelXCoord + firstAxisLength - STRING_DISTANCE_FROM_CARTESIAN / 2), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + STRING_DISTANCE_FROM_CARTESIAN)); g2.drawString("Y", (int)(distanceOfCartesianFromPanelXCoord - STRING_DISTANCE_FROM_CARTESIAN), (int)(distanceOfCartesianFromPanelYCoord + STRING_DISTANCE_FROM_CARTESIAN / 2)); g2.drawString("(0, 0)", (int)(distanceOfCartesianFromPanelXCoord - STRING_DISTANCE_FROM_CARTESIAN), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + STRING_DISTANCE_FROM_CARTESIAN)); // draw first-axis numbers drawNumbersOnFirstAxis(g2, numberOfFirstCoordNumbers); //draw second-axis numbers drawNumbersOnSecondAxis(g2, numberOfSecondCoordNumbers); } public void setNamesOfAxis(String firstName, String secondName) { this.firstName = firstName; this.secondName = secondName; } public void setNumbersOfCordinateNumbers(int firstCoordNumbers, int secondCoordNumbers) { this.numberOfFirstCoordNumbers = firstCoordNumbers; this.numberOfSecondCoordNumbers = secondCoordNumbers; } public int getNumberOfPixelsByNumber() { if((firstAxisLength / numberOfFirstCoordNumbers) < (secondAxisLength / numberOfSecondCoordNumbers)) numberOfPixelsByNumber = firstAxisLength / numberOfFirstCoordNumbers; else numberOfPixelsByNumber = secondAxisLength / numberOfSecondCoordNumbers; return numberOfPixelsByNumber; } public void setDistanceOfCartesianFromPanel(int x, int y) { this.distanceOfCartesianFromPanelXCoord = x; this.distanceOfCartesianFromPanelYCoord = y; } public void setNumbersDistanceFromCartesian(int distance) { this.numbersDistanceFromCartesian = distance; } public void populateAxisWithAdditionalNumbers(boolean populate) { this.populateWithAdditionalNumbers = populate; int numberOfPixelsByNumber = getNumberOfPixelsByNumber(); } public void drawNumbersOnFirstAxis(Graphics2D g2, int numberOfNumbersOnFirstAxis) { int numberOfPixelsByNumber = getNumberOfPixelsByNumber(); for(int i = 1; i < numberOfNumbersOnFirstAxis; i++) { g2.drawLine((int)(distanceOfCartesianFromPanelXCoord + (i * numberOfPixelsByNumber)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength - SECOND_LENGHT), (int)(distanceOfCartesianFromPanelXCoord + (i * numberOfPixelsByNumber)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + SECOND_LENGHT)); g2.drawString(Integer.toString(i), (int)(distanceOfCartesianFromPanelXCoord + (i * numberOfPixelsByNumber) - 4), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + STRING_DISTANCE_FROM_CARTESIAN)); } if(populateWithAdditionalNumbers) { int currentPopulatePixelsOnXCoord = numberOfPixelsByNumber * numberOfFirstCoordNumbers; if(currentPopulatePixelsOnXCoord < firstAxisLength) { int additionalNumbers = 0; while((currentPopulatePixelsOnXCoord + (additionalNumbers * numberOfPixelsByNumber)) < firstAxisLength - 20) { g2.drawLine((int)(distanceOfCartesianFromPanelXCoord + ((additionalNumbers + numberOfNumbersOnFirstAxis) * numberOfPixelsByNumber)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength - SECOND_LENGHT), (int)(distanceOfCartesianFromPanelXCoord + ((additionalNumbers + numberOfNumbersOnFirstAxis) * numberOfPixelsByNumber)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + SECOND_LENGHT)); g2.drawString(Integer.toString(additionalNumbers + numberOfNumbersOnFirstAxis), (int)(distanceOfCartesianFromPanelXCoord + (((additionalNumbers + numberOfNumbersOnFirstAxis) * numberOfPixelsByNumber) - 4)), (int)(distanceOfCartesianFromPanelYCoord + secondAxisLength + STRING_DISTANCE_FROM_CARTESIAN)); additionalNumbers += 1; } } } } public void drawNumbersOnSecondAxis(Graphics2D g2, int numberOfNumbersOnSecondAxis) { int numberOfPixelsByNumber = getNumberOfPixelsByNumber(); for(int i = 1; i < numberOfNumbersOnSecondAxis; i++) { g2.drawLine((int)distanceOfCartesianFromPanelXCoord - SECOND_LENGHT, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - (i * numberOfPixelsByNumber), (int)distanceOfCartesianFromPanelXCoord + SECOND_LENGHT, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - (i * numberOfPixelsByNumber)); g2.drawString(Integer.toString(i), (int)distanceOfCartesianFromPanelXCoord - STRING_DISTANCE_FROM_CARTESIAN, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - (i * numberOfPixelsByNumber)); } if(populateWithAdditionalNumbers) { int currentPopulatePixelsOnYCoord = numberOfPixelsByNumber * numberOfSecondCoordNumbers; if(currentPopulatePixelsOnYCoord < secondAxisLength) { int additionalNumbers = 0; while((currentPopulatePixelsOnYCoord + (additionalNumbers * numberOfPixelsByNumber)) < secondAxisLength - 20) { g2.drawLine((int)distanceOfCartesianFromPanelXCoord - SECOND_LENGHT, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - ((additionalNumbers + numberOfNumbersOnSecondAxis) * numberOfPixelsByNumber), (int)distanceOfCartesianFromPanelXCoord + SECOND_LENGHT, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - ((additionalNumbers + numberOfNumbersOnSecondAxis) * numberOfPixelsByNumber)); g2.drawString(Integer.toString((additionalNumbers + numberOfNumbersOnSecondAxis)), (int)distanceOfCartesianFromPanelXCoord - STRING_DISTANCE_FROM_CARTESIAN, (int)distanceOfCartesianFromPanelYCoord + secondAxisLength - ((additionalNumbers + numberOfNumbersOnSecondAxis) * numberOfPixelsByNumber)); additionalNumbers += 1; } } } } }
Here is a simple program which explain using of cartesian class:
class: PositiveCartesianUI.java
Java Code:import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class PositiveCartesianUI { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { PositiveCartesianFrame frame = new PositiveCartesianFrame(); frame.showUI(); } }); } } class PositiveCartesianFrame extends JFrame { PositiveCartesianPanel panel; public PositiveCartesianFrame() { panel = new PositiveCartesianPanel(); getContentPane().add(panel); } public void showUI() { setTitle("Basic user interface program"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1010,850); setVisible(true); } } class PositiveCartesianPanel extends JPanel { PositiveCartesian cartesian; public PositiveCartesianPanel() { } public void paintComponent(Graphics g) { super.paintComponent(g); cartesian = new PositiveCartesian(750, 650); cartesian.populateAxisWithAdditionalNumbers(true); cartesian.drawCartesian(g); } }
Similar Threads
-
java x,y coordinate
By robc in forum Advanced JavaReplies: 7Last Post: 05-29-2010, 06:11 AM -
Cartesian plane problem
By thats_kickin in forum New To JavaReplies: 3Last Post: 03-30-2010, 10:14 PM -
Convert Cartesian coordinate system into java coordinate system?
By 123 in forum Java 2DReplies: 3Last Post: 02-07-2010, 08:34 PM -
set coordinate to an image
By nuur in forum AWT / SwingReplies: 2Last Post: 04-01-2008, 08:08 AM -
X&Y Coordinate Drawing on jPanel
By BHCluster in forum Java 2DReplies: 2Last Post: 03-27-2008, 10:47 AM


LinkBack URL
About LinkBacks

Bookmarks