最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript實現(xiàn)多邊形碰撞檢測

 更新時間:2020年10月24日 16:09:44   作者:newmiracle宇宙  
這篇文章主要介紹了javascript如何實現(xiàn)多邊形碰撞檢測,幫助大家更好的理解和使用js,感興趣的朋友可以了解下

javascript多邊形碰撞檢測

原理就是 循環(huán)每個頂點判斷是不是在多邊形內(nèi)

const app = new PIXI.Application({ antialias: true });
document.body.appendChild(app.view);

const graphics = new PIXI.Graphics();


// draw polygon
const path = [600, 370, 700, 460, 780, 420, 730, 570, 590, 520];

graphics.lineStyle(0);
graphics.beginFill(0x3500FA, 1);
graphics.drawPolygon(path);
graphics.endFill();

app.stage.addChild(graphics);

 var xuanzhuan = PIXI.Sprite.from('/moban/images/share.jpg');
 xuanzhuan.width=120;
 xuanzhuan.height=120;
 xuanzhuan.x=13;
 xuanzhuan.y=33;
  app.stage.addChild(xuanzhuan);


  xuanzhuan.interactive = true;

  xuanzhuan.buttonMode = true;
   xuanzhuan
    .on('pointerdown', onDragStart)
    .on('pointerup', onDragEnd)
    .on('pointerupoutside', onDragEnd)
    .on('pointermove', onDragMove);

  function onDragStart(event) {
  // store a reference to the data
  // the reason for this is because of multitouch
  // we want to track the movement of this particular touch
  this.data = event.data;
  this.alpha = 0.5;
  this.dragging = true;
}

function onDragEnd() {
  this.alpha = 1;
  this.dragging = false;
  // set the interaction data to null
  this.data = null;
}
   var  posPolygon=[];
     var dianlist={};
    dianlist['x']=600;
    dianlist['y']=370; 
    posPolygon.push(dianlist)
  var dianlist={};
    dianlist['x']=700;
    dianlist['y']=460; 
    posPolygon.push(dianlist)  
  var dianlist={};
    dianlist['x']=780;
    dianlist['y']=420; 
    posPolygon.push(dianlist)   
  var dianlist={};
    dianlist['x']=730;
    dianlist['y']=570; 
   posPolygon.push(dianlist) 
  var dianlist={};
    dianlist['x']=590;
    dianlist['y']=520; 
    posPolygon.push(dianlist)
function onDragMove() {
  if (this.dragging) {
    const newPosition = this.data.getLocalPosition(this.parent);
    this.x = newPosition.x;
    this.y = newPosition.y;

    var baoweihe=this.getBounds();
    var youxiajiaox=baoweihe.x+baoweihe.width;
    var youxiajiaoy=baoweihe.y+baoweihe.height;

    var poslist=[];
     var pos={};
    pos['x']=baoweihe.x;
    pos['y']=baoweihe.y;    
    poslist.push(pos);      

  var pos={};
    pos['x']=youxiajiaox;
    pos['y']=baoweihe.y;    
    poslist.push(pos);      
    var pos={};
    pos['x']=youxiajiaox;
    pos['y']=youxiajiaoy;    
    poslist.push(pos);

    var pos={};
    pos['x']=baoweihe.x;
    pos['y']=youxiajiaoy;    
    poslist.push(pos);    

     
  
    var ispengzhuang=PolygonInPolygon(poslist, posPolygon,5);
    if(ispengzhuang){
      alert('碰撞了');
    }


  }
}

function PolygonInPolygon(posPolygonA, posPolygonB, count){
  console.log(posPolygonA);
    var count1=posPolygonA.length;
   for(var i=0;i<count1;i++ ){
    var pos=posPolygonA[i];
      console.log(pos);
     var ispengzhuang=PointInPolygon( pos, posPolygonB, count);
     if(ispengzhuang){
      alert('碰撞了')
     }
   }
}

function PointInPolygon( pos, posPolygonB, count)
{
  var cross = 0; //交點個數(shù)
    
  for( var i = 0; i < count; i++ )
  {
    var p1 = posPolygon[i];
    var p2 = posPolygon[(i + 1) % count]; //下一個節(jié)點
 
    // p1p2這條邊與水平線平行
    if( p1.y == p2.y )
      continue;
 
    // 交點在p1p2的延長線上
    if( pos.y < Math.min( p1.y, p2.y ) )
      continue;
 
    // 交點在p1p2的延長線上
    if( pos.y > Math.max( p1.y, p2.y ) )
      continue;
      
    // 計算交點 X 左邊 : (p2.y - p1.y)/(p2.x - p1.x) = (y - p1.y)/(x - p1.x)
    // 直線 K 值相等, 交點y = pos.y
    let x = (pos.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x
    // 只統(tǒng)計單邊交點,即點的正向方向
    if(x > pos.x)
      cross ++;
  }
 
  return cross % 2 == 1;
}

以上就是javascript實現(xiàn)多邊形碰撞檢測的詳細(xì)內(nèi)容,更多關(guān)于javascript多邊形碰撞檢測的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Js 根據(jù)文件夾目錄獲取Json數(shù)據(jù)輸出demo

    詳解Js 根據(jù)文件夾目錄獲取Json數(shù)據(jù)輸出demo

    這篇文章主要為大家介紹了Js 根據(jù)文件夾目錄獲取Json數(shù)據(jù)輸出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JavaScript組件開發(fā)之輸入框加候選框

    JavaScript組件開發(fā)之輸入框加候選框

    本文給大家分享基于js組件開發(fā)的輸入框加候選框的實例代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的的朋友參考下
    2017-03-03
  • Js獲取當(dāng)前日期時間及格式化代碼

    Js獲取當(dāng)前日期時間及格式化代碼

    這篇文章主要為大家詳細(xì)介紹了Js獲取當(dāng)前日期時間及格式化代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見)

    一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見)

    這篇文章主要介紹了一篇文章搞定JavaScript類型轉(zhuǎn)換(面試常見),非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • Bootstrap每天必學(xué)之折疊(Collapse)插件

    Bootstrap每天必學(xué)之折疊(Collapse)插件

    Bootstrap每天必學(xué)之折疊(Collapse)插件,折疊插件可以很容易地讓頁面區(qū)域折疊起來,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JS字符串轉(zhuǎn)GBK編碼超精簡實現(xiàn)詳解

    JS字符串轉(zhuǎn)GBK編碼超精簡實現(xiàn)詳解

    JS中GBK編碼轉(zhuǎn)字符串是非常簡單的,但反過來,字符串轉(zhuǎn)GBK編碼卻沒這么簡單。接下來本文就將帶大家一起康康JS如何實現(xiàn)字符串轉(zhuǎn)GBK編碼,需要的可以參考一下
    2022-08-08
  • Javascript異步編程之你真的懂Promise嗎

    Javascript異步編程之你真的懂Promise嗎

    這篇文章主要介紹了Javascript異步編程之Promise,想了解異步編程和Promise的同學(xué),可以參考下
    2021-04-04
  • JS實現(xiàn)文本比較差異的示例代碼

    JS實現(xiàn)文本比較差異的示例代碼

    內(nèi)部系統(tǒng)上線了一個發(fā)版記錄發(fā)版內(nèi)容的功能,維護(hù)發(fā)版記錄的同事提出一個可以展示前后文本差異的優(yōu)化需求,?使的每次變更前可以確認(rèn)新增了哪些,或者刪除了哪些內(nèi)容,所以本文給大家介紹了基于JS實現(xiàn)文本比較差異,需要的朋友可以參考下
    2023-12-12
  • JavaScript實現(xiàn)簡單計時器

    JavaScript實現(xiàn)簡單計時器

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)簡單計時器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • javascript createAdder函數(shù)功能與使用說明

    javascript createAdder函數(shù)功能與使用說明

    createAdder(x)是一個函數(shù),返回一個函數(shù)。在JavaScript中,函數(shù)是第一類對象:另外它們可以被傳遞到其他函數(shù)作為參數(shù)和函數(shù)返回。在這種情況下,函數(shù)返回本身就是一個函數(shù)接受一個參數(shù),并增加了一些東西。
    2010-06-06

最新評論

宜章县| 庆云县| 林口县| 都兰县| 鹰潭市| 时尚| 新闻| 和田市| 思茅市| 成都市| 凯里市| 广东省| 静安区| 容城县| 府谷县| 阆中市| 白城市| 黄骅市| 乌兰县| 五峰| 静海县| 客服| 江油市| 政和县| 克山县| 大姚县| 江陵县| 万荣县| 苍山县| 延安市| 休宁县| 凯里市| 清原| 儋州市| 清流县| 天水市| 洪湖市| 临桂县| 东丽区| 富阳市| 龙川县|