본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 원의 중심과 원의 관계(상속과 클래스 배열 이용)

점의 좌표에 대한 클래스를 만든다.

x좌표와 y좌표 따로 저장할 수 있어야하고 순서쌍으로도 가져올 수 있어야한다.

점과 점 사이의 거리 메소드를 작성한다.

이때 java.math를 import하여 그 안에 있는 메소드를 사용한다.(제곱근 메소드 squrt(숫자), 제곱 메소드 pow(밑, 지수))

거리 메소드는 여러가지 경우가 있기에

현재 점과 다른 점 사이의 거리

현재 점과 다른 클래스 점 사이의 거리

현재 점과 원점(0, 0) 사이의 거리

메소드를 오버로딩 한다.

.

.

package Mypoint;
import java.math.*;

public class MyPoint {
	private int x = 0;
	private int y = 0;
	
	public MyPoint() {}
	public MyPoint(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public int getX() { return x; }
	public void setX(int x) { this.x = x; }
	public int getY() { return y;}	
	public void setY(int y) { this.y = y; }
	public int[] getXY() {
		int[] arr = {x, y};
		return arr;
	}
	public void setXY(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	@Override
	public String toString() {
		return "MyPoint (" + x + ", " + y + ")";
	}
	
	public double distance(int x, int y) {
		int xDistance = this.x - x;
		int yDistance = this.y - y;
		double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
		return distance;
	}
	
	public double distance(MyPoint another) {
		int xDistance = this.x - another.x;
		int yDistance = this.y - another.y;
		double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
		return distance;
	}
	
	public double distance() {
		double distance = Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
		return distance;
	}
	
}

.

.

점 클래스가 잘 작성됐는지 확인하는 Test클래스를 만들어 확인한다.

.

.

package Mypoint;

public class TestMyPoint_test {

	public static void main(String[] args) {
		MyPoint p1 = new MyPoint(); // 생성자 테스트
		System.out.println(p1); // toString() 테스트
		p1.setX(8); // setters 테스트
		p1.setY(6);
		System.out.println("x is: " + p1.getX()); // getters 테스트
		System.out.println("y is: " + p1.getY());
		p1.setXY(3, 0); // setXY() 테스트
		System.out.println(p1.getXY()[0]); // getXY() 테스트
		System.out.println(p1.getXY()[1]);
		System.out.println(p1);
		MyPoint p2 = new MyPoint(0, 4); // 다른 생성자 테스트
		System.out.println(p2); // 오버로드 메소드 distance() 테스트
		System.out.println(p1.distance(p2)); // 어느 메소드?
		System.out.println(p2.distance(p1)); // 어느 메소드?
		System.out.println(p1.distance(5, 6)); // 어느 메소드?
		System.out.println(p1.distance()); // 어느 메소드
		
		MyPoint[] points = new MyPoint[10];
		
		for(int i = 0; i < points.length; i++) {
			points[i] = new MyPoint(i + 1, i + 1);
		}
		for(int i = 0; i < points.length; i++) {
			System.out.println(points[i]);
		}
	}

}

.

.

.

.

잘 확인이 됐다면 점 클래스를 상속받아 원 클래스를 작성한다.

원 클래스는 점 클래스의 좌표가 원의 중심이 된다.

원과 원 사이의 거리는 원의 중심끼리의 거리를 이용한다.

원의 넓이 구할 때는 3.14로 하였지만 java.math 안에 있는 Math.PI()를 이용해됴 된다.

.

.

package Mypoint;
import java.math.*;

public class MyCircle {
	MyPoint center;
	private int radius = 1;
	private int x;
	private int y;
	MyCircle(){}
	
	MyCircle(int x, int y, int radius){
		center = new MyPoint(x, y);
		this.radius = radius;
	}
	
	MyCircle(MyPoint center, int radius){
		this.center = new MyPoint(center.getX(), center.getY());
		this.center = center;
		this.radius = radius;
	}
	
	public MyPoint getCenter() { return center; }
	public void setCenter(MyPoint center) { this.center = center; }
	public int getRadius() { return radius; }
	public void setRadius(int radius) { this.radius = radius; }
	public int getX() { return x; }
	public void setX(int x) { this.x = x; }
	public int getY() { return y; }
	public void setY(int y) { this.y = y; }
	
	public double getCircumference() {
		return radius * 2 * Math.PI;
	}
	public double distance(MyCircle another) {
		return center.distance(another.center);
	}
	
	@Override
	public String toString() {
		return "MyCircle [center=" + getCenter() + ", radius=" + radius + "]";
	}
}

.

.

테스트를 해본다.

.

.

package Mypoint;

public class TestMyCircle {

	public static void main(String[] args) {
		MyPoint p1 = new MyPoint(1, 2);
		MyCircle cir1 = new MyCircle(5, 4, 3);
		MyCircle cir2 = new MyCircle(p1, 5);
		
		System.out.println(p1);
		System.out.println(cir1);
		System.out.println(cir2);
		
		System.out.println(cir1.distance(cir2));
	}
}

.

.

 

728x90
반응형