2013-02-03 19 views
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 
+0

यह शायद मूल्यों आपको लगता है कि आप डीबगिंग के भाग के रूप में पढ़ा outputting के लायक है ... – Floris

उत्तर

5

आप एक तस्वीर आकर्षित हैं, तो आप बिंदु सरल असमानताओं को पूरा करने के है देख सकते हैं (नीचे/ऊपर/कुछ लाइनों के दाईं ओर)। "किनारे पर" चाहे में है या बाहर मैं आप पर निर्भर छोड़ देंगे: एक

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

लिखें अगर इन तीन के आसपास बयान और आपका काम हो:

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

मैं आपके पास पर्याप्त शुक्रिया अदा नहीं कर सकते हैं होगा। मैं हमेशा सब कुछ खत्म कर रहा हूँ। आपने मेरा सप्ताहांत बनाया है! – Lish

+0

@ लिश - आपका स्वागत है। देर रातें आपके दिमाग में ऐसा करती हैं ... – Floris

5

तुम गलत मूल्य ऑर्डर दिया अपने सूत्र में; इसलिए, परिणाम गलत है। 3 कोने निम्नलिखित

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

तो क्षेत्र के रूप में

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

उसके बाद गणना की जाती है के रूप में कर रहे हैं, तो आप बस इनपुट बिंदु के साथ एक शिखर की जगह, हम निम्नलिखित त्रिकोण होगा: पीबीसी, एपीसी, एबीपी।

सब कुछ एकत्र किया गया, हम सही एक

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; 
संबंधित मुद्दे