5

私はこれに何時間も取り組んでおり、ほぼすべての質問を見てさまざまな方法を試しています。完全に間違っているのかもしれませんが、計算は正しいと思いますが、入力した数値に関係なく、同じ出力が得られます。私のコードはどこかで外れており、真夜中までに提出しなければなりません。

とても楽しいです: ポイントが三角形のコード内にあるかどうかを調べます。(初心者向け)

import java.util.Scanner;

public class PointsTriangle {

    // checks if point entered is within the triangle
    //given points of triangle are (0,0) (0,100) (200,0)
    public static void main (String [] args) {
        //obtain point (x,y) from user
        System.out.print("Enter a point's x- and y-coordinates: ");
        Scanner input = new Scanner(System.in);
        double x = input.nextDouble();
        double y = input.nextDouble();

        //find area of triangle with given points
        double ABC = ((0*(100-0  )+0*(0  -0)+200*(0-100))/2.0);
        double PAB = ((x*(0  -100)+0*(100-y)+0  *(y-  0))/2.0);
        double PBC = ((x*(100-0  )+0*(0  -y)+200*(y-100))/2.0);
        double PAC = ((x*(0  -100)+0*(100-y)+200*(y-  0))/2.0);

        boolean isInTriangle = PAB + PBC + PAC == ABC;

        if (isInTriangle)
            System.out.println("The point is in the triangle");
        else
            System.out.println("The point is not in the triangle");
    }//end main
}//end PointsTriangle
4

2 に答える 2

6

数式に間違った値の順序を入れました。したがって、結果は間違っています。3つの頂点が次の場合

A(x1, y1) B(x2, y2), C(x3, y3)

面積は次のように計算されます。

double ABC = Math.abs (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2;

その後、各頂点を入力ポイントに置き換えるだけで、次の三角形が作成されます: PBC、APC、ABP。

すべてをまとめると、正しいものが得られます

int x1 = 0, y1 = 0;
int x2 = 0, y2 = 100;
int x3 = 200, y3 = 0;

// no need to divide by 2.0 here, since it is not necessary in the equation
double ABC = Math.abs (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
double ABP = Math.abs (x1 * (y2 - y) + x2 * (y - y1) + x * (y1 - y2));
double APC = Math.abs (x1 * (y - y3) + x * (y3 - y1) + x3 * (y1 - y));
double PBC = Math.abs (x * (y2 - y3) + x2 * (y3 - y) + x3 * (y - y2));

boolean isInTriangle = ABP + APC + PBC == ABC;
于 2013-02-03T05:52:54.180 に答える
5

絵を描くと、点が単純な不等式 (特定の線の下/上/右) を満たす必要があることがわかります。「端にいる」かどうかは、あなた次第です。

Y > 0 (above the X axis)
X > 0 (to the right of the Y axis)
X + 2* Y < 200 (below the hypotenuse)

これら 3 つの周りに if ステートメントを記述すれば完了です。

if( (y > 0) && (x > 0) && (x + 2*y < 200) ) 
  System.out.println("The point is in the triangle");
else
  System.out.println("The point is not in the triangle");
于 2013-02-03T05:06:55.790 に答える