2013-02-03 20 views
5

Sono stato su questo per ore, tentando metodi diversi esaminando praticamente ogni domanda. Forse ho sbagliato completamente, ma sento di avere i miei calcoli corretti, ma a prescindere dai numeri che inserisco, ottengo lo stesso risultato. Il mio codice è spento da qualche parte e devo accenderlo entro la mezzanotte.Determinare se un punto si trova all'interno di un triangolo

È tutto così divertente: trova se un punto si trova all'interno di un codice triangolo. (Per i principianti)

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 
+0

E 'probabilmente la pena di emissione dei valori si pensa che si legge come parte del debug ... – Floris

risposta

5

Se si disegna un quadro, si può vedere il punto deve soddisfare le disuguaglianze semplici (sotto/sopra/a destra di alcune linee). Sia "al limite" è dentro o fuori lascerò a voi:

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

Scrivi un'istruzione if attorno a questi tre e il gioco è fatto:

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"); 
+0

non posso ringraziarvi abbastanza. Sto sempre pensando troppo a tutto. Hai fatto il mio weekend! – Lish

+0

@Lish - prego. Le notti tarde fanno questo al tuo cervello ... – Floris

5

voi hanno ordinato valore errato nella tua formula; quindi, il risultato è sbagliato. Se i 3 vertici sono le seguenti

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

poi la zona è calcolato come

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

Dopo di che, basta sostituire ogni vertice con il punto di ingresso, avremo i seguenti triangoli: PBC, APC, ABP.

Mettere tutto insieme, avremo quella corretta

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; 
Problemi correlati