java平面_Java中的笛卡尔平面

本文探讨了如何在Java中创建一个笛卡尔平面,并在该平面上绘制点。作者介绍了基本的平面设置代码,并尝试添加一个自定义的点类以实现坐标转换及点的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

它提供了Java中笛卡尔平面的示例。我几乎可以理解该代码的所有内容(除了一些行,例如invokelater,SwingUtilities,稍后我将对其进行介绍..)。

假设现在我要使用构造函数,getter,将点的笛卡尔坐标转换为“像素坐标”的方法以及在平面上打印该点的方法来创建“点”类。

因此,这是从链接中获取的代码:

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

public class Cartesian {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

CartesianFrame frame = new CartesianFrame();

frame.showUI();

}

});

}

}

class CartesianFrame extends JFrame {

CartesianPanel panel;

public CartesianFrame() {

panel = new CartesianPanel();

add(panel);

}

public void showUI() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle("Cartesian");

setSize(700, 700);

setVisible(true);

}

}

class CartesianPanel extends JPanel {

// x-axis coord constants

public static final int X_AXIS_FIRST_X_COORD = 50;

public static final int X_AXIS_SECOND_X_COORD = 600;

public static final int X_AXIS_Y_COORD = 600;

// y-axis coord constants

public static final int Y_AXIS_FIRST_Y_COORD = 50;

public static final int Y_AXIS_SECOND_Y_COORD = 600;

public static final int Y_AXIS_X_COORD = 50;

//arrows of axis are represented with "hipotenuse" of

//triangle

// now we are define length of cathetas of that triangle

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_LENGHT = 6;

// distance of coordinate strings from axis

public static final int AXIS_STRING_DISTANCE = 20;

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

// x-axis

g2.drawLine(X_AXIS_FIRST_X_COORD, X_AXIS_Y_COORD,

X_AXIS_SECOND_X_COORD, X_AXIS_Y_COORD);

// y-axis

g2.drawLine(Y_AXIS_X_COORD, Y_AXIS_FIRST_Y_COORD,

Y_AXIS_X_COORD, Y_AXIS_SECOND_Y_COORD);

// draw origin Point

g2.fillOval(

X_AXIS_FIRST_X_COORD - (ORIGIN_COORDINATE_LENGHT / 2),

Y_AXIS_SECOND_Y_COORD - (ORIGIN_COORDINATE_LENGHT / 2),

ORIGIN_COORDINATE_LENGHT, ORIGIN_COORDINATE_LENGHT);

// numerate axis

int xCoordNumbers = 10;

int yCoordNumbers = 10;

int xLength = (X_AXIS_SECOND_X_COORD - X_AXIS_FIRST_X_COORD)

/ xCoordNumbers;

int yLength = (Y_AXIS_SECOND_Y_COORD - Y_AXIS_FIRST_Y_COORD)

/ yCoordNumbers;

// draw x-axis numbers

for(int i = 1; i < xCoordNumbers; i++) {

g2.drawLine(X_AXIS_FIRST_X_COORD + (i * xLength),

X_AXIS_Y_COORD - SECOND_LENGHT,

X_AXIS_FIRST_X_COORD + (i * xLength),

X_AXIS_Y_COORD + SECOND_LENGHT);

g2.drawString(Integer.toString(i),

X_AXIS_FIRST_X_COORD + (i * xLength) - 3,

X_AXIS_Y_COORD + AXIS_STRING_DISTANCE);

}

//draw y-axis numbers

for(int i = 1; i < yCoordNumbers; i++) {

g2.drawLine(Y_AXIS_X_COORD - SECOND_LENGHT,

Y_AXIS_SECOND_Y_COORD - (i * yLength),

Y_AXIS_X_COORD + SECOND_LENGHT,

Y_AXIS_SECOND_Y_COORD - (i * yLength));

g2.drawString(Integer.toString(i),

Y_AXIS_X_COORD - AXIS_STRING_DISTANCE,

Y_AXIS_SECOND_Y_COORD - (i * yLength));

}

}

}

这是我要添加的类Point:

class Point{

public int x,y;

public Point(int x,int y){

this.x=x;

this.y=y;

}

public Point FromCartToPix() {

this.x=X_AXIS_FIRST_X_COORD+(x*xLength);

this.y=Y_AXIS_SECOND_Y_COORD - (y * yLength);

return this;

}

public int GetX(){

return this.x;

}

public int GetY(){

return this.y;

}

public void DrawPoint(){

g2.fillOval(

this.FromCartToPix().Getx(),

this.FromCartToPix().Gety(),

ORIGIN_COORDINATE_LENGHT, ORIGIN_COORDINATE_LENGHT);

}

}

我所拥有的Java手册仅有一小章关于Java图形和Swing,因此我无法实现此类。我认为应该将其插入

PaintComponent(Graphics g)

否则我将无法使用

g2.filloval

但后来我无法使用

Point a = new Point (2,3);

内部主要

我知道这是一个模糊且笼统的问题,但我无法使其正常工作。我搜索了很多有关Graphics2D g2

=(Graphics2D)g的用法,但是即使在Javadocs上也找不到精确的解释。

如果您知道一个解释它的链接,我将不胜感激

提前致谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值