문제
두 지점 사이의 거리를 계산하는 클래스를 만들어야합니다. 나는 붙어 있고 나는 총 초보자이다. 내 수업은 다음과 같습니다.
package org.totalbeginner.tutorial;
public class Point {
public double x;
public double y;
Point(double xcoord, double ycoord){
this.x = xcoord;
this.y = ycoord;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
}
두 번째 수업.
package org.totalbeginner.tutorial;
public class Line {
double x;
double y;
Point p1 = new Point(2.0,2.0);
Point p2 = new Point(4.0,4.0);
Point mp = new Point(x,y);
public void midpoint() {
x = (p1.getX() + p2.getX()) / 2;
y = (p1.getY() + p2.getY()) / 2;
}
}
정의 된 지점 사이에서 포인트 객체 (중간 지점)를 얻는 방법을 잘 모르겠습니다.
포인트 객체를 만들 수 있지만 내를 통해 포인트 객체를 반환하는 방법을 잘 모르겠습니다. midpoint()
이 두 포인트 객체 사이에있는 방법.
해결책
평평한 표면의 두 지점 (x1, y1)과 (x2, y2) 사이의 거리는 다음과 같습니다.
____________________
/ 2 2
\/ (y2-y1) + (x2-x1)
그러나 원하는 것이 두 지점의 중간 지점이라면 중간 점 기능을 변경해야합니다.
public Point midpoint (Point p1, Point p2) {
return new Point ((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2);
}
이것은 주어진 두 포인트의 중간으로 설정된 포인트가있는 새로운 포인트 객체를 반환합니다 (다른 수학에 대해 걱정할 필요없이). 그리고 두 번째 클래스는 라인이므로 설명하기 위해 두 개의 엔드 포인트 만 있으면됩니다. 따라서 약간의 변경을 할 것입니다.
첫 번째 Point.java
:
class Point {
double x, y;
Point (double xcoord, double ycoord) {
this.x = xcoord;
this.y = ycoord;
}
public double getX() { return x; }
public double getY() { return y; }
}
그 다음에 Line.java
:
public class Line {
Point p1, p2;
Line (Point point1, Point point2) {
this.p1 = point1;
this.p2 = point2;
}
public Point midpoint() {
return new Point ((p1.getX()+p2.getX())/2, (p1.getY()+p2.getY())/2);
}
public double abstand() {
return Math.sqrt(
(p1.getX() - p2.getX()) * (p1.getX() - p2.getX()) +
(p1.getY() - p2.getY()) * (p1.getY() - p2.getY())
);
}
static public void main (String args[]) {
Line s = new Line (new Point(2.0, 2.0), new Point(5.0, 6.0));
Point mp = s.midpoint();
System.out.println ("Midpoint = (" + mp.getX() + "," + mp.getY() + ")");
double as = s.abstand();
System.out.println ("Length = " + as);
}
}
이 두 파일은 컴파일되고 엔드 포인트로 실행될 때 2,2
그리고 5,6
(클래식 3/4/5 오른쪽 변형 삼각형의 hypotenuse)는 올바른 것을 생성합니다.
Midpoint = (3.5,4.0)
Length = 5.0
다른 팁
간단한 피 타그 ... 루트 (dx^2 + dy^2)
Math.sqrt(Math.pow((p2.getX() - p1.getX()), 2) + Math.pow((p2.getY() - p1.getY()), 2))
X
+
|\
| \
a| \c
| \
| \
+-----+
b Y
X와 Y가 평평한 표면에있는 포인트라고 상상해보십시오. 그 다음에 a
~이다 X.y - Y.y
그리고 b
~이다 Y.x - X.x
. 길이 c
그들의 거리이며, 그 삼각형의 hypotenuse의 길이입니다. 사용하여 계산됩니다
sqrt(a^2 + b^2);
당신은 우리가 사각형을보고 있기 때문에 a
그리고 b
, 그들의 표시는 관련이 없습니다. 따라서이 방법은 항상 포인트가있는 곳에서 항상 작동합니다.
당신은 정말로 거리가 필요합니까, 아니면 그냥 중간 점을 얻으려고합니까? 코드 스 니펫에서, 그것은 당신이 두 개의 기존 지점 사이의 반쯤 된 새로운 포인트를 만들고 싶어하는 것처럼 보입니다.
중간 지점 직후에 실제로이를 달성하기 위해 2 등석 (예 : 'line')이 필요하지 않습니다. 당신이 찾으려고하는 것은 또한 요점이기 때문에, 기존 포인트 클래스에 생성자를 추가하는 것이 합리적입니다.
Point(Point a, Point b)
{
x = (a.x + b.x) / 2;
y = (a.y + b.y) / 2;
}
.. 그런 다음 다른 곳에서 이미 사용하려는 몇 가지 점이 있다고 가정 해 봅시다. 따라서 생성자를 사용하여 다음을 사용합니다.
Point p1 = new Point(2,2);
Point p2 = new Point(4,4);
Point midpoint = new Point(p1, p2);
그리고 두 지점 사이의 거리를 정말로 원한다면, 그것은 실제로 어느 지점의 속성이 아니므로, 그렇게 정적 메소드를 사용하는 것이 합리적입니다.
public static double distance(Point a, Point b)
{
double dx = a.x - b.x;
double dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
}
그리고 호출 코드로 돌아가서, 당신은 다음과 같은 방식으로 사용할 수 있습니다.
Point p1 = new Point(2,2);
Point p2 = new Point(4,4);
System.out.println("Distance between them is " + Point.distance(p1, p2));
이를 위해 수학 기능을 사용할 수 있습니다.
public Point midpoint() {
//Calculate the difference between the old and new x/y
double dx = p1.getX() - p2.getX();
double dy = p1.getY() - p2.getY();
double newX = Math.pow(dx, 2D);
double newY = Math.pow(dz, 2D);
return new Point(newX, newZ);
}
수학 음수 값 등의 문제를 처리합니다. Math.Pow를 사용하면 내부에 많은 수표가 제작되었으므로 안전한 방법을 제공합니다.
피타고라스 정리를 사용할 수 있습니다, 다른 사람이 말했듯이. 여기에서 시각적으로 탈퇴 한 것입니다 Wolfram Demostration 프로젝트.
Alt Text http://demonstrations.wolfram.com/distancebetweentwopoints/htmlimages/index.en/popup_5.jpg
두 번째 클래스에서는 값을 설정하려는 것 같습니다. x
그리고 y
그것은 당신을 구성하는 데 사용됩니다 mp
변하기 쉬운. 모든 공식은 정확하지만 고려해야합니다. 주문하다 모든 것이 실행됩니다. 코드에서 그대로 x
그리고 y
0으로 시작한 변수, 그리고 다양한 Point
에스. x
그리고 y
여전히 0입니다 mp
설정되었습니다 Point(0, 0)
.
아마도 당신이하고 싶은 것은 변화하는 것입니다 반환 유형 의 midpoint
에게 Point
, 당신이 그 기능을 호출 할 때, 당신은 Point
. 그러면 새를 만들 수 있습니다 Point
계산하는 값이있는 객체. 더처럼 보일 것입니다.
public Point midpoint() {
// calculate the middle x and y
double x = (p1.getX() + p2.getX()) / 2;
double y = (p1.getY() + p2.getY()) / 2;
// now make a new Point with those values, and return it
return new Point(x, y);
}