0

単一の点オブジェクトから線オブジェクト (2 つの点)、そして三角形のオブジェクト (3 つの点) に分岐する単純なオブジェクトを作成しようとしています。点クラスの作成方法は理解できましたが、線クラスに分岐しようとすると、最初の点クラスを使用して実際に線クラスまたは三角形クラスを作成する方法に少し混乱しました。ワンポイントクラスから

これまでに行ったコードを投稿できます。

また、すでに Java ジオメトリ クラスが存在することも読みましたが、これらのクラスを実際に作成して OOP を練習したいと考えています。

編集 --- 以下にコードを追加

class Point 
{
private double x;
private double y;

public Point() 
{
    x = 0.0;
    y = 0.0;
}

public Point(double x, double y) 
{
    this.x = x;
    this.y = y;
}

public double getX() 
{
    return this.x;
}

public double getY() 
{
    return this.y;
}

public void setX(double x) 
{
    this.x = x;
}

public void setY(double y) 
{
    this.y = y;
}

public double distance(Point p) 
{
    return Math.sqrt((this.x - p.x) * (this.x - p.x) + (this.y - p.y)
            * (this.y - p.y));
}

public String toString() 
{
    String s = "(" + x + ", " + y + ")";
    return s;
}

public boolean equals(Point p) 
{
    double delta = 1.0e-18;
    return (Math.abs(this.x - p.x) < delta)
            && (Math.abs(this.y - p.y) < delta);
}

//-----------------Line Class--------------------//
class Line 
{
private Point p1;
private Point p2;

public Line() 
{
    p1 = new Point (0,0);
    p2 = new Point (1,1);
}

public Line(double x1, double y1, double x2, double y2) 
{
    p1 = new Point (x1, y1);
    p2 = new Point (x2, y2);
}

public Line(Point p, Point q)
{
    p1 = new Point(p.getX(), p.getY());
    p2 = new Point(q.getX(), q.getY());
}

public Point getP1()
{
    return this.p1;
}

public Point getP2()
{
    return this.p2;
}

public void setP1(double x, double y)
{
    Point p1 = new Point(x, y);
    this.p1 = p1;
}

public void setP2(double x, double y)
{
    Point p2 = new Point(x, y);
    this.p2 = p2;   
}

public boolean isParallelY() 
{
    double delta = 1.0e-18;
    return (Math.abs(p1.getX() - p2.getX()) < delta);
}

public boolean isParallelX()
{
    double delta = 1.0e-18;
    return (Math.abs(p1.getY() - p2.getY()) < delta);
}

public boolean isParallel (Line line)
{
    if (this.Slope() == line.Slope())
        return true;
    else 
        return false;
}

public double Slope() 
{
    double inf = Double.POSITIVE_INFINITY;
    if(isParallelY())
        return inf;
    return ((p2.getY() - p1.getY()) / (p2.getX() - p1.getX()));
}

public double xIntercept()
{
    return -(p1.getY() / Slope() - p1.getX());
}

public double yIntercept()
{
    return p1.getY() - (Slope() * p1.getX());
}

私はまだ線クラスにメソッドを追加しており、三角形クラスを開始していません (ただし、3 つの線ではなく 3 つの点を持つ三角形を作成することを考えていました。分岐の混乱については申し訳ありませんが、私は比較的新しいです。

4

2 に答える 2

0

もしあなたが本当に OOP をやりたいのなら、あなたのドメインにどんなオブジェクトが存在するか、そしてそれらがどんなメッセージを理解するかを考えてみてください

あなたの場合、あなたはPoints を見つけました。あなたは 2D ポイントで考えているようです。それが、あなたが使用したばかりの理由でxあり、y座標です。2D の世界では、何を聞きたいPointですか? それは位置/座標ですよね - 私たちはすでにそれらを持っています。ほかに何か?別の距離ですよPointね。それは今までにできることのほとんどすべてのようPointです。

待ってください。別PointLine. だから、たぶん、やることaPoint.lineTo(anotherPoint)はそれほど悪くない。しかし、重要なことは、実際に を作成しているということですLine

それらは一対のドットで構成されています。に何を聞きたいLineですか?もちろん長いです。それは明らかにその点間の距離と同じです。aまでの距離を尋ねることができますPoint(一部の数学者はすでに定義しています)。Line が別の Line と平行かどうか、または交差するかどうかを尋ねることができます。どのポイントで交差するかを尋ねることができます。2 本の線がなす角度を尋ねることができます。そして、再び、3 番目の点と結合してTriangle.

次に、凸形状を作成します。面積、周長、内角、外角などの新しい楽しみがあります。

物事、概念、定義を考え、できるだけ簡単に実装してください。コードが表す概念の口語的な定義にできるだけ近いコードを作成するようにしてください。そして、以前のものに基づいて新しい抽象化を構築します。

これらすべてに加えて、忘れてはならないことが 1 つあります。プログラミングはモデリングです。モデルは抽象化です。OOP は、関心のある現実の部分をモデル化するためにオブジェクトを使用することです。モデル化したいものの範囲を定義しない場合 (このケースは単なる教育活動であり、実際の要件はありません)、次のことができます。オブジェクトにメソッドを追加するのは、あまり意味がありません。ポイント、ライン、トライアングルなどで何ができるようになりたいかを事前に考え、それらに限定してください。

ハッピーハッキング:)

于 2013-08-12T05:29:46.317 に答える