一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

當前時訊:如何判定一個點是否在三角形內?判定方法是什么?

來源:CSDN 時間:2023-04-17 09:52:47


(資料圖)

判定一個點是否在三角形內如何判定一個點P是否存在于指定的三角形ABC內,這肯定是一個簡單的問題,本文僅用一個圖形界面程序展示了該問題,有興趣的朋友可以看看。(2008.07.24最后更新) 在此處使用一種常見且簡便的方法:如果三角形PAB,PAC和PBC的面積之和與三角形ABC的面積相等,即可判定點P在三角形ABC內(包括在三條邊上)。 可知,該方法的關鍵在于如何計算三角形的面積。幸運地是,當知道三角形頂點(A,B和C)的坐標((Ax, Ay),(Bx, By)和(Cx, Cy))之后,即可計算出其面積: S  = |(Ax * By + Bx * Cy + Cx * Zy - Ay * Bx - By * Cx - Cy * Ax) /  2| 關鍵的代碼如下, //  由給定的三個頂點的坐標,計算三角形面積。 //  Point(java.awt.Point)代表點的坐標。 private   static   double  triangleArea(Point pos1, Point pos2, Point pos3) {double  result  =  Math.abs((pos1.x  *  pos2.y  +  pos2.x  *  pos3.y  +  pos3.x  *  pos1.y              -  pos2.x  *  pos1.y  -  pos3.x  *  pos2.y  -  pos1.x  *  pos3.y)  /   2.0D );      return  result; } //  判斷點pos是否在指定的三角形內。 private   static   boolean  inTriangle(Point pos, Point posA, Point posB,         Point posC) {double  triangleArea  =  triangleArea(posA, posB, posC);      double  area  =  triangleArea(pos, posA, posB);     area  +=  triangleArea(pos, posA, posC);     area  +=  triangleArea(pos, posB, posC);      double  epsilon  =   0.0001 ;   //  由于浮點數的計算存在著誤差,故指定一個足夠小的數,用于判定兩個面積是否(近似)相等。      if  (Math.abs(triangleArea  -  area)  <  epsilon) {return   true ;     }      return   false ; } 執行該應用程序,用鼠標在其中點擊三次,即可繪制一個三角形,如下組圖所示: 然后僅需移動鼠標,就會出現一個空心圓圈。如果圓圈的中心在三角內(包含在三條邊上),則圓圈顯示為紅色;否則,顯示為藍色。如下組圖所示: 完整代碼如下: public   class  CanvasPanel  extends  JPanel {private   static   final   long  serialVersionUID  =   - 6665936180725885346L ;      private  Point firstPoint  =   null ;      private  Point secondPoint  =   null ;      private  Point thirdPoint  =   null ;      public  CanvasPanel() {setBackground(Color.WHITE);         addMouseListener(mouseAdapter);         addMouseMotionListener(mouseAdapter);     }      public   void  paintComponent(Graphics g) {super .paintComponent(g);         drawTriangel(g);     }      private   void  drawTriangel(Graphics g) {if  (firstPoint  !=   null   &&  secondPoint  !=   null ) {g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y);              if  (thirdPoint  !=   null ) {g.drawLine(firstPoint.x, firstPoint.y, thirdPoint.x, thirdPoint.y);                 g.drawLine(secondPoint.x, secondPoint.y, thirdPoint.x, thirdPoint.y);             }         }     }      private   static   boolean  inTriangle(Point pos, Point posA, Point posB,             Point posC) {double  triangeArea  =  triangleArea(posA, posB, posC);          double  area  =  triangleArea(pos, posA, posB);         area  +=  triangleArea(pos, posA, posC);         area  +=  triangleArea(pos, posB, posC);          double  epsilon  =   0.0001 ;          if  (Math.abs(triangeArea  -  area)  <  epsilon) {return   true ;         }          return   false ;     }      private   static   double  triangleArea(Point pos1, Point pos2, Point pos3) {double  result  =  Math.abs((pos1.x  *  pos2.y  +  pos2.x  *  pos3.y  +  pos3.x  *  pos1.y                             -  pos2.x  *  pos1.y  -  pos3.x  *  pos2.y  -  pos1.x  *  pos3.y)  /   2.0D );          return  result;     }      private  MouseInputAdapter mouseAdapter  =   new  MouseInputAdapter() {public   void  mouseReleased(MouseEvent e) {Point pos  =  e.getPoint();              if  (firstPoint  ==   null ) {firstPoint  =  pos;             }  else   if  (secondPoint  ==   null ) {secondPoint  =  pos;                 Graphics g  =  CanvasPanel. this .getGraphics();                 CanvasPanel. this .paintComponent(g);                 g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y);             }  else   if  (thirdPoint  ==   null ) {thirdPoint  =  pos;                 Graphics g  =  CanvasPanel. this .getGraphics();                 CanvasPanel. this .paintComponent(g);                 g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y);                 g.drawLine(firstPoint.x, firstPoint.y, thirdPoint.x, thirdPoint.y);                 g.drawLine(secondPoint.x, secondPoint.y, thirdPoint.x, thirdPoint.y);             }         }          public   void  mouseMoved(MouseEvent e) {Point pos  =  e.getPoint();             Graphics2D g2  =  (Graphics2D) CanvasPanel. this .getGraphics();             CanvasPanel. this .paintComponent(g2);              if  (firstPoint  !=   null   &&  secondPoint  ==   null ) {g2.drawLine(firstPoint.x, firstPoint.y, pos.x, pos.y);             }  else   if  (firstPoint  !=   null   &&  secondPoint  !=   null &&  thirdPoint  ==   null ) {g2.drawLine(firstPoint.x, firstPoint.y, pos.x, pos.y);                 g2.drawLine(secondPoint.x, secondPoint.y, pos.x, pos.y);             }  else   if  (firstPoint  !=   null   &&  secondPoint  !=   null &&  thirdPoint  !=   null ) {if  (inTriangle(pos, firstPoint, secondPoint, thirdPoint)) {g2.setColor(Color.RED);                 }  else  {g2.setColor(Color.BLUE);                 }                  int  radius  =   4 ;                 g2.drawOval(pos.x  -  radius, pos.y  -  radius, radius  *   2 , radius  *   2 );             }         }     }; } public   class  Triangle  extends  JFrame {private   static   final   long  serialVersionUID  =   1L ;      private  CanvasPanel mainPanel  =   null ;      public  Triangle() {setTitle( " Triangle " );         setSize( new  Dimension( 300 ,  200 ));         setResizable( false );         init();         Container container  =  getContentPane();         container.add(mainPanel);         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         setVisible( true );     }      private   void  init() {mainPanel  =   new  CanvasPanel();     }      public   static   void  main(String[] args) {new  Triangle();     } }

還可參見一篇英文文章:   http://www.blackpawn.com/texts/pointinpoly/default.html         好文章  ;-)

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
亚洲一区免费| 日韩一级二级三级| 欧美婷婷久久| 国产精品久久国产三级国电话系列| 欧美三级视频在线观看| 国产日本精品| 亚洲午夜精品久久久久久浪潮| 欧美一区二区三区免费视| 快射av在线播放一区| 国产精品高潮呻吟视频| 亚洲欧洲精品一区二区三区| 亚洲免费综合| 欧美人成网站| 亚洲国产精品第一区二区三区 | 亚洲麻豆一区| 午夜激情综合网| 欧美第一黄网免费网站| 国产精品日产欧美久久久久| 亚洲日本欧美天堂| 久久久精品欧美丰满| 欧美午夜无遮挡| 亚洲国产经典视频| 久久久国产视频91| 国产日韩欧美| 亚洲欧美精品在线| 蜜臀av国产精品久久久久| 国产精品久久久久影院亚瑟| 亚洲高清在线播放| 久久网站免费| 国产亚洲一区二区精品| 一区二区高清视频| 欧美日韩在线视频一区二区| 伊人激情综合| 免播放器亚洲一区| 亚洲国产一二三| 麻豆精品网站| 国外成人性视频| 久久这里有精品15一区二区三区 | 亚洲制服丝袜在线| 欧美日韩国产综合新一区| 99视频精品全部免费在线| 欧美日韩在线播放三区四区| 亚洲一区二区三区久久| 国产美女一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲国产91色在线| 欧美另类女人| 亚洲欧美日韩在线不卡| 国产日韩视频一区二区三区| 久久免费午夜影院| 亚洲区免费影片| 国产精品久久久久久久7电影| 欧美在线影院在线视频| 在线精品观看| 欧美日韩一区不卡| 性色av一区二区怡红| 激情小说另类小说亚洲欧美 | 亚洲欧美日韩精品久久奇米色影视 | 美女91精品| av不卡在线观看| 国产日本亚洲高清| 欧美精品一区二区三区很污很色的| 一本色道久久精品| 国产亚洲a∨片在线观看| 免费精品99久久国产综合精品| 亚洲精品一区在线| 国产三级精品在线不卡| 欧美国产日本高清在线| 香蕉乱码成人久久天堂爱免费| 亚洲国产欧美在线人成| 国产欧美亚洲日本| 欧美激情影院| 久久婷婷激情| 亚洲欧美不卡| 日韩视频专区| 在线免费观看视频一区| 国产精品影院在线观看| 欧美激情欧美狂野欧美精品| 欧美一区成人| 亚洲午夜精品| 亚洲欧洲在线免费| 国模私拍一区二区三区| 欧美偷拍另类| 欧美精品一区三区| 美女任你摸久久| 久久久久久自在自线| 亚洲一区二区三区四区视频| 亚洲欧洲视频在线| 黑人一区二区| 狠狠综合久久av一区二区小说| 国产美女精品在线| 国产精品专区一| 国产精品任我爽爆在线播放| 欧美日韩 国产精品| 欧美电影在线免费观看网站| 久久免费精品日本久久中文字幕| 午夜欧美视频| 午夜在线成人av| 午夜一区二区三区在线观看| 亚洲午夜在线观看| 亚洲一区二区精品在线观看| 日韩视频在线免费| 在线亚洲美日韩| 这里只有精品丝袜| 亚洲视频网在线直播| 一区二区欧美日韩| 在线综合亚洲| 欧美在线|欧美| 久久精品视频在线免费观看| 欧美一站二站| 久久人人九九| 欧美国产综合视频| 欧美屁股在线| 国产精品女人网站| 国产亚洲一本大道中文在线| 国产日韩欧美日韩大片| 国产色婷婷国产综合在线理论片a| 国产原创一区二区| 国产在线高清精品| 亚洲欧洲在线一区| 亚洲国产婷婷香蕉久久久久久| 在线欧美电影| 一区二区三区精品视频在线观看| 中文一区二区| 性久久久久久| 久久精品国产精品亚洲综合| 性做久久久久久免费观看欧美| 久久人人爽人人爽| 欧美了一区在线观看| 国产精品永久免费| 亚洲福利视频专区| 亚洲调教视频在线观看| 久久精品女人的天堂av| 欧美极品aⅴ影院| 国产麻豆综合| 亚洲美女一区| 欧美一级理论性理论a| 母乳一区在线观看| 欧美肉体xxxx裸体137大胆| 国产欧美一区二区三区沐欲| 亚洲人成毛片在线播放| 亚洲一区二区三区四区五区黄| 久久久久久久久久看片| 欧美裸体一区二区三区| 国内精品久久久久久久影视蜜臀 | 欧美香蕉视频| 亚洲国产精品激情在线观看| 亚洲欧美日韩中文在线制服| 欧美激情一区二区三区在线视频观看| 国产精品久久福利| 最新中文字幕一区二区三区| 欧美在线观看视频一区二区三区| 欧美精品首页| 在线观看欧美| 久久久久五月天| 国产精品高潮久久| 日韩一级不卡| 欧美激情五月| 亚洲日本理论电影| 免费短视频成人日韩| 红桃视频亚洲| 久久久另类综合| 狠狠色丁香婷综合久久| 欧美一区二区在线看| 国产精品久久久久一区二区| 亚洲视频在线观看| 欧美日韩在线一二三| 99re成人精品视频| 欧美精品久久99久久在免费线| 激情亚洲网站| 美日韩精品视频| 亚洲第一伊人| 欧美黄色aaaa| 在线亚洲+欧美+日本专区| 欧美色中文字幕| 亚洲欧美激情在线视频| 国产九九视频一区二区三区| 亚洲欧美激情四射在线日 | 免费亚洲电影在线| 亚洲国产婷婷香蕉久久久久久| 快she精品国产999| 原创国产精品91| 欧美国产三区| 在线一区二区三区做爰视频网站| 欧美日韩在线不卡| 午夜日本精品| 精久久久久久| 欧美乱人伦中文字幕在线| 夜夜爽夜夜爽精品视频| 国产精品久久久久av免费| 性刺激综合网| 亚洲电影中文字幕| 欧美日韩亚洲视频| 亚洲女同性videos| 一区二区三区在线观看国产| 欧美成人综合在线| 亚洲一区二区在线观看视频| 国产在线精品二区| 欧美日韩岛国| 亚洲一二三四久久|