문제

두 지점 사이의 거리를 계산하는 클래스를 만들어야합니다. 나는 붙어 있고 나는 총 초보자이다. 내 수업은 다음과 같습니다.

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, 그들의 표시는 관련이 없습니다. 따라서이 방법은 항상 포인트가있는 곳에서 항상 작동합니다.

조심 Pythagorean theorem

당신은 정말로 거리가 필요합니까, 아니면 그냥 중간 점을 얻으려고합니까? 코드 스 니펫에서, 그것은 당신이 두 개의 기존 지점 사이의 반쯤 된 새로운 포인트를 만들고 싶어하는 것처럼 보입니다.

중간 지점 직후에 실제로이를 달성하기 위해 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top