当前位置: 代码迷 >> J2SE >> 很急给80分,该怎么处理
  详细解决方案

很急给80分,该怎么处理

热度:29   发布时间:2016-04-24 02:06:08.0
很急,给80分
给定任意4个点坐标如ab,bc,cd,ad
在给定1个点,判断该点在图形内还是外,还是在4个边上
要好用的代码
有人说用向量积,向量有内积和外积,怎么写
写全好用给分

------解决方案--------------------
探讨

http://developer.51cto.com/art/200908/146258.htm C#版本的。

------解决方案--------------------
帮顶!
------解决方案--------------------
这是一个典型的凸包问题 是一个算法题

你百度下就可以找到答案
------解决方案--------------------
改下
import java.util.*;
public class Test {
public void judge(double[] x, double[] y, int a, int b) {
double[] k = new double[4];

k[0] = Math.abs((x[3] - x[0]) / (y[3] - y[0]));
k[1] = Math.abs((x[3] - x[1]) / (y[3] - y[1]));
k[2] = Math.abs((x[3] - x[2]) / (y[3] - y[2]));
k[3] = Math.abs((x[2] - x[1]) / (y[2] - y[1]));

//冒泡排序,两大的是两竖, 两小的是两横
double temp;
for(int i = 0; i < 4; i++) {
for( j = 0; j < 4 - i - 1; j++) {
if(k[j] > k[j+1]) {
temp = k[j];
k[j] = k[j+1];
k[j+1] = temp;
}
}
}

//判断
if(b == k[0]* a || b == k[1]* a || b == k[2]* a || b == k[3]* a) {
System.out.println( "在线上 ");
} else if(((b > k[0]*a && b < k[1]*a) || (b < k[0]*a && b > k[1]*a))
&& ((b > k[2]*a && b < k[3]*a) || (b < k[2]*a && b > k[3]*a))) {
System.out.println( "在图形内 ");
} else {
System.out.println( "在图像外 ");
}

}

public static void main(String[] args){
double[] x = new int[4];
double[] y = new int[4];
double a, b;
Scanner p = new Scanner(System.in);

System.out.println( "输入任意4个点,xy ");
for(int i = 0; i < 4; i++) {
x[i] = p.nextDouble();
y[i] = p.nextDouble();
}
System.out.println( "输入任意1个点,ab ");
a = p.nextDouble();
b = p.nextDouble();
p.close();

judge(x, y, a, b);
}
}

花了我27分种--!
------解决方案--------------------
我顶。。。。。。。。。。。。。。。
------解决方案--------------------
帮忙顶
------解决方案--------------------
任意4个点按选取顺序形成封闭区域,判别第五个点是否在区域内

1:花了2-3个小时完成了这个题目,相当复杂
定义了 Point, Vector, Line, Triangle等几何对象
实现MouseEvent MouseMoveEvent

2:动态鼠标,形状智能支持,选取不同数目位置,显示的形状逐步丰富
当选完3或4个点时可右键回退重新选取
  
3:实现基本原理:将四边形按各种情况分解为2个三角形,改为判别是否在三角形中

4: 涉及计算:已选取三点,第四点的位置判断(记下)
选取第四点,根据前面的位置分解三角形
计算两个直线的交点(本实现中是一定有交点的,不全面),采用了优化算法中最基本的黄金分割法
三角形面积计算

5: 文件清单及编译运行方法
HelloAppletWorld_Mouse.java
drawer.java
_2DPoint.java

放入同一个文件夹,javac *.java
appletviewer HelloAppletWorld_Mouse.java

6: 不过在java.awt中有更简单的实现方法(我也是在写的差不多时才发现)
不放程序了,提醒: Polygon.contains()
HelloAppletWorld_Mouse.java
Java code
/*<HTML>    <HEAD>        <TITLE>A Simple Program</TITLE>    </HEAD>        <BODY bgcolor=gray>        Here is the output of my program:<BR>        <APPLET             CODE="HelloAppletWorld_Mouse.class"             WIDTH=650 HEIGHT=550        >        </APPLET>    </BODY>    </HTML>*/import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class HelloAppletWorld_Mouse extends Applet implements MouseListener,MouseMotionListener{    ArrayList<_2DPoint> m_listPoint         = new ArrayList<_2DPoint>(4);    _2DPoint             m_obj5thPoint         = null;    _2DPoint             m_objMovingPoint   = null;            ArrayList<_2DPoint> m_listTopoWhen3P    = null;      String              m_strPosDesc        = null;      int[]                m_nNo4Pos            = new int[3];            ArrayList<_2DPoint> m_listAux4P            = new ArrayList<_2DPoint>();      _2DPoint             m_objCrossPoint     = null;      Triangle            T1= null;      Triangle            T2= null;            boolean                m_b5InArea            = false;          public void init()    {        resize(800,800);        addMouseListener(this);        addMouseMotionListener(this);    }      public void paint(Graphics g) {        if(m_listPoint.size()<1)            return;                drawer painter = new drawer((Graphics2D)g);        if(T1!=null&&T2!=null)        {            painter.draw(T1,Color.red);            painter.draw(T2,Color.blue);        }            _2DPoint lastP = null;            if(m_listPoint.size()>0)        {            lastP = m_listPoint.get(0);            painter.draw(lastP,Color.red);        }                if(m_listPoint.size()>1)        {            lastP = m_listPoint.get(1);            painter.draw(lastP,Color.red);            painter.draw(lastP,m_listPoint.get(0),Color.green);        }                if(m_listPoint.size()>2)        {            lastP = m_listPoint.get(2);            painter.draw(lastP,Color.red);            painter.draw(lastP,m_listPoint.get(1),Color.green);            painter.draw(m_listPoint.get(0),m_listPoint.get(1),Color.green);        }                if(m_listPoint.size()>3)        {            lastP = m_listPoint.get(3);            painter.draw(lastP,Color.red);            painter.draw(lastP,m_listPoint.get(2),Color.green);            painter.draw(m_listPoint.get(2),m_listPoint.get(1),Color.green);            painter.draw(m_listPoint.get(1),m_listPoint.get(0),Color.green);            painter.draw(m_listPoint.get(0),lastP,Color.green);        }        if(m_listPoint.size()<4)        {            painter.draw(m_objMovingPoint,lastP,Color.blue);        }                if(m_b5InArea)            painter.draw2(m_objMovingPoint,Color.green);        else                painter.draw(m_objMovingPoint,Color.red);                if(m_listTopoWhen3P!=null)        {            for(int i=0;i<m_listTopoWhen3P.size();i=i+2)            {                painter.draw(m_listTopoWhen3P.get(i),m_listTopoWhen3P.get(i+1),Color.pink);            }        }        if(m_strPosDesc!=null)            g.drawString(m_strPosDesc,10,10);                    if(m_listAux4P.size()>0)        {            painter.draw(m_listAux4P.get(0),m_listAux4P.get(1),Color.blue);        }                if(m_objCrossPoint!=null)        {            painter.draw(m_objCrossPoint,Color.yellow);        }                    }        public void mouseEntered(MouseEvent e){}     public void mouseExited(MouseEvent e) {}    public void mouseReleased(MouseEvent e){}     public void mousePressed(MouseEvent e){}           public void mouseClicked(MouseEvent e)    {        if(e.getButton()==1 && m_listPoint.size()<4){            _2DPoint p = new _2DPoint(e.getX(),e.getY());            m_listPoint.add(p);            p.setIndex(m_listPoint.size());                        if(m_listPoint.size()==3)            {                m_listTopoWhen3P = _2DPoint.load123Topo(m_listPoint.get(0),m_listPoint.get(1),m_listPoint.get(2));            }                            if(m_listPoint.size()==4)                {                int _4_1_2 = m_nNo4Pos[0];                int _4_2_3 = m_nNo4Pos[1];                int _4_3_1 = m_nNo4Pos[2];                                if(_4_1_2==1&&_4_2_3==1&&_4_3_1==1) //三点内部                {                    m_listAux4P.add(m_listPoint.get(1));                    m_listAux4P.add(m_listPoint.get(3));                                        T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(1),m_listPoint.get(3));                    T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_listPoint.get(3));                }else if((_4_1_2*_4_2_3)*_4_3_1==1)    //三个对角区域                {                    if(_4_2_3==1){                        m_listAux4P.add(m_listPoint.get(0));                        m_listAux4P.add(m_listPoint.get(2));                                                T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(2),m_listPoint.get(3));                        T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_listPoint.get(0));                    }                    if(_4_3_1==1){                        m_listAux4P.add(m_listPoint.get(1));                        m_listAux4P.add(m_listPoint.get(3));                        T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(1),m_listPoint.get(3));                        T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_listPoint.get(3));                    }                    if(_4_1_2==1){                        m_listAux4P.add(m_listPoint.get(0));                        m_listAux4P.add(m_listPoint.get(2));                        T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(2),m_listPoint.get(3));                        T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_listPoint.get(0));                    }                }else //三个边外区域                {                    if(_4_3_1==-1)                    {                        m_listAux4P.add(m_listPoint.get(1));                        m_listAux4P.add(m_listPoint.get(3));                        T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(1),m_listPoint.get(3));                        T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_listPoint.get(3));                    }                    if(_4_1_2==-1)                    {                        //34 12求交                        Line l1 = new Line(m_listPoint.get(2),m_listPoint.get(3));                        Line l2 = new Line(m_listPoint.get(0),m_listPoint.get(1));                                                m_objCrossPoint = Line.getCrossPoint(l1,l2);                        m_objCrossPoint.setIndex(6);                                                T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(3),m_objCrossPoint);                        T2 = new Triangle(m_listPoint.get(1),m_listPoint.get(2),m_objCrossPoint);                    }                    if(_4_2_3==-1)                    {                        //14 23求交                        Line l1 = new Line(m_listPoint.get(3),m_listPoint.get(0));                        Line l2 = new Line(m_listPoint.get(2),m_listPoint.get(1));                                                m_objCrossPoint = Line.getCrossPoint(l1,l2);                        m_objCrossPoint.setIndex(6);                                                T1 = new Triangle(m_listPoint.get(0),m_listPoint.get(1),m_objCrossPoint);                        T2 = new Triangle(m_listPoint.get(3),m_listPoint.get(2),m_objCrossPoint);                    }                }            }                                    repaint();        }else if(e.getButton()==3 && m_listPoint.size()==4)        {            m_listPoint.remove(3);            m_listAux4P.clear();            m_objCrossPoint=null;            T1=null;            T2=null;            repaint();        }else if(e.getButton()==3 && m_listPoint.size()==3)        {            m_listPoint.remove(2);            m_listTopoWhen3P.clear();            m_listTopoWhen3P=null;            repaint();        }    }        public void mouseDragged(MouseEvent e){}            public void mouseMoved(MouseEvent e)    {                m_objMovingPoint = new _2DPoint(e.getX(),e.getY());        m_objMovingPoint.setIndex(m_listPoint.size()+1);                if(m_listPoint.size()==3)        {            _2DVector.locateP4(m_nNo4Pos,m_listPoint.get(0),m_listPoint.get(1),m_listPoint.get(2),m_objMovingPoint);            m_strPosDesc="4-1-2:"+m_nNo4Pos[0]+"; 4-2-3:"+m_nNo4Pos[1]+";4-3-1:"+m_nNo4Pos[2];        }                if(T1!=null&&T2!=null)        {             m_b5InArea = T1.contains(m_objMovingPoint)||T2.contains(m_objMovingPoint);        }                repaint();    }}
  相关解决方案