получается ли точка внутри треугольника
От: Nfnehtdbx2  
Дата: 28.12.13 17:13
Оценка:
y=x*(y1+y2)/(x1+x2)
x=y*(x1+x2)/(y1+y2)

Пересечение вертикальной или горизонтальной прямой отрезка
(если добавить косинус или синус возможно походу и не горизонтального и вертикального, а под углом)

если обе точки над вашей или под вашей (правее и левее для у) то точка не входит
если выше и ниже или правее, левее то входит
точки задаются в виде a,b,c,d,e,f
потом сортируются x3>x2>x2 и y3>y2>y1
import java.lang.*;
import java.util.*;
import java.math.*;
public class Program {
    
    
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        long x1=0;
        long x2=0;
        long x3=0;
        long x=0;
        long yp1=0;
        long yp2=0;
        long xp1=0;
        long xp2=0;
        long y2=0;
        long y3=0;
        long y1=0;
        long ind1=0;
        long sx1=0;
        long sx2=0;
        long sx3=0;
        long sy2=0;
        long sy3=0;
        long sy1=0;
        long y=0;
        
        long a=0;
        long b=0;
        long c=0;
        long d=0;
        long e=0;
        long f=0;
        
        //сортировка координат по x          
        if((a<=b)&&(b<=c)){x1=a; x2=b; x3=c; y1=d; y2=e; y3=f;}
        if((a<=c)&&(c<=b)){x1=a; x2=c; x3=b; y1=d; y2=f; y3=e;}
        if((b<=a)&&(a<=c)){x1=b; x2=a; x3=c; y1=e; y2=d; y3=f;}
        if((c<=a)&&(a<=b)){x1=c; x2=a; x3=b; y1=f; y2=d; y3=e;}
        if((b<=c)&&(c<=a)){x1=b; x2=c; x3=a; y1=e; y2=f; y3=d;}
        if((c<=b)&&(b<=a)){x1=c; x2=b; x3=a; y1=f; y2=e; y3=d;}
        
        
        
        //Сортировка координат по y
        if((d<=e)&&(e<=f)){sy1=d; sy2=e; sy3=f; sx1=a; sx2=b; sx3=c;}
        if((f<=e)&&(e<=d)){sy1=f; sy2=e; sy3=d; sx1=c; sx2=b; sx3=a;}
        if((e<=d)&&(d<=f)){sy1=e; sy2=d; sy3=f; sx1=b; sx2=a; sx3=c;}
        if((f<=d)&&(d<=e)){sy1=f; sy2=d; sy3=e; sx1=c; sx2=a; sx3=b;}
        if((e<=f)&&(f<=d)){sy1=e; sy2=f; sy3=d; sx1=b; sx2=c; sx3=a;}
        if((d<=f)&&(f<=e)){sy1=f; sy2=e; sy3=d; sx1=a; sx2=c; sx3=b;}
        
        
        
        
    
        
        
        
ind1=0;    //это число будет равно 1 если точка входит и 0 если она не входит    
//Проверка по x    
if((x1!=x2)&&(x1!=x3)&&(x3!=x2)){if(   ((y1==y2)&&(y1==y3))==false       ){
    
if(x>x1){if(x<(x2)){
    yp1=x*(y1+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
    
    if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
            
        }}
  
if(x<x3){if(x>x2){
               yp1=x*(y+y2)/(x1+x2); yp2=x*(y1+y3)/(x1+x3);
               
            if(((yp1>y1)&&(yp2<y2))||((yp1<y1)&&(yp2>y2))){ind1=1;}
                    
                }}
             
    
}}else{


//Проверка по y    
if((sy1!=sy2)&&(sy1!=y3)&&(sy3!=sy2)){    if(   ((sx1==sx2)&&(sx1==sx3))==false       ){    
if(y>sy1){if(y<(sy2)){
    xp1=y*(sx1+sx2)/(sy1+sy2); xp2=y*(sx1+sx3)/(sy1+sy3);
    
    if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
            
        }}
  
if(y<sy3){if(y>sy2){
               xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
               
            if(((xp1>sx1)&&(xp2<sx2))||((xp1<sx1)&&(xp2>sx2))){ind1=1;}
                    
                }}
        
 
}}}//обре проверки завершились


//если треугольник прямоугольный(4 варианта прямоугольных треугольников)
if(   ( ((sx1==sx2)&&(sx2==sx3)) || ((sy1==sy2)&&(sy2==sy3)) )== false   ){
    
 if(  ((sx1==sx2)&&(sy1==sy2))||((sx2==sx3)&&(sy2==sy3))||((sx1==sx2)&&(sy2==sy3))||((sx2==sx3)&&(sy1==sy2))  )
{    
    
    if((y>sy1)&&(y<sy3)){
        
    
         xp1=y*(x+sx2)/(sy1+sy2); xp2=x*(sx1+sx3)/(sy1+sy3);
         
    if(((x>xp1)&&(x<xp2))||((x<xp1)&&(x>xp2))){ind1=1;}
    
    }}}


   System.out.println(ind1);
   
    }}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.