设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 195|回复: 0

凸多边形碰撞的NFP算法实现

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-29 19:52 | 显示全部楼层 |阅读模式
    1. 最近我写了一个关于凸多边形碰撞的NFP算法的小程序,这里把代码传上来大家看一看。程序是用devc++实现的windowsAPI程序。

    2. http://download1.csdn.net/down3/20070622/22130938822.rar



    3. 代码如下:



    4. #include <windows.h>
    5. #include <stdlib.h>
    6. #include <stdio.h>
    7. #include <conio.h>
    8. #include <dos.h>
    9. #define H 600
    10. #define W 800


    11. typedef struct node {   /*  定义的顶点结构 */
    12.    int x;
    13.    int y;
    14.    double value;
    15. }NODE;

    16. typedef struct edage{   /*  定义的边结构 */
    17.    int headX;
    18.    int headY;
    19.    int tailX;
    20.    int tailY;
    21. }EDGE;   

    22. typedef struct polygon{  /* 定义的多边形结构 */
    23.    NODE *Node;
    24.    EDGE *Edge;
    25.    int cx;
    26.    int cy;
    27.    int nNode;
    28. }PolyGon;


    29. PolyGon PolyGonA;       /*  声明多边形 A 变量 */
    30. PolyGon PolyGonB;       /*  声明多边形 B 变量 */

    31. NODE * trace;

    32. int PolyALowX=0,PolyALowY=0;
    33. int PolyBHighX=0,PolyBHighY=0;
    34. int mycolor=1;

    35. void init()
    36. {
    37. FILE *fp;
    38. int i;

    39. PolyGonA.nNode=0;
    40. PolyGonB.nNode=0;

    41. if( ( fp=fopen("d:/polygon.txt","r") ) ==NULL )
    42.   {
    43.     printf("Open file failed  ");
    44.     exit(0);
    45.   }

    46.   fscanf( fp , "%d" , &PolyGonA.nNode);
    47.   PolyGonA.Node = ( NODE *) malloc( sizeof(NODE)*PolyGonA.nNode );
    48.   PolyGonA.Edge = ( EDGE *) malloc( sizeof(EDGE)*PolyGonA.nNode );

    49.   for(i=0;i<PolyGonA.nNode;i++)
    50.    fscanf( fp , "%d%d", &PolyGonA.Node[i].x , &PolyGonA.Node[i].y );  /*   读数据文件内容到多边形变量中 */



    51.   fscanf( fp , "%d" , &PolyGonB.nNode);
    52.   PolyGonB.Node = ( NODE *) malloc( sizeof(NODE)*PolyGonB.nNode );
    53.   PolyGonB.Edge = ( EDGE *) malloc( sizeof(EDGE)*PolyGonB.nNode );

    54.   for(i=0;i<PolyGonB.nNode;i++)
    55.    fscanf( fp , "%d%d", &PolyGonB.Node[i].x , &PolyGonB.Node[i].y );  /*   读数据文件内容到多边形变量中 */

    56.   fclose(fp);

    57.   trace=(NODE *)malloc(sizeof(NODE)*(PolyGonA.nNode+PolyGonB.nNode+1)); /* 创建一个轨迹顶点列表 */

    58. }

    59. void Sort(NODE *Node , int n)                      /* 使用简单选择排序进行排序 */
    60. {
    61.   NODE tNode;
    62.   int i,j,Min=0;

    63.   for(i=0;i<n;i++)
    64.   {
    65.     Min=i;
    66.     for(j=i;j<n;j++)
    67.       if( Node[j].value<Node[Min].value )
    68.           Min=j;
    69.     if(Min!=i)
    70.      {
    71.        tNode=Node[i];
    72.        Node[i]=Node[Min];
    73.        Node[Min]=tNode;
    74.      }
    75.    }  
    76. }


    77. int ConnectNodeList(NODE * Node1, int nNode1, NODE *Node2 , int nNode2 , NODE * Node , int CONNECTSTYLE)
    78. {
    79.   int i,j;

    80.   if(CONNECTSTYLE==0)
    81.    {
    82.     for(i=0 ; i<nNode1 ; i++)
    83.       Node[i]=Node1[i];
    84.     for(j=0;j<nNode2;j++)
    85.       Node[i++]=Node2[j];
    86.    }
    87.   else if(CONNECTSTYLE==1)
    88.    {
    89.     for(i=0;i<nNode2;i++)
    90.       Node[i]=Node2[i];

    91.     for(j=0;j<nNode1;j++)
    92.       Node[i++]=Node1[j];
    93.    }
    94.   return (nNode1+nNode2);
    95. }

    96. void CreatEdgeList()
    97. {
    98.   int i,j,k,npNode1=0,npNode2=0;
    99.   int count=0;

    100.   int CenterOfPolygonAX=0,CenterOfPolygonAY=0;
    101.   int CenterOfPolygonBX=0,CenterOfPolygonBY=0;
    102.   NODE *pNode1,*pNode2;


    103.   for (i=0;i<PolyGonA.nNode;i++)
    104.   {
    105.     CenterOfPolygonAX+=PolyGonA.Node[i].x;
    106.     CenterOfPolygonAY+=PolyGonA.Node[i].y;
    107.   }
    108.    CenterOfPolygonAX=CenterOfPolygonAX/PolyGonA.nNode;
    109.    CenterOfPolygonAY=CenterOfPolygonAY/PolyGonA.nNode;        /* 得到多边形 A 的形心  */
    110.    
    111.   PolyGonA.cx=CenterOfPolygonAX;
    112.   PolyGonA.cy=CenterOfPolygonAY;

    113.   for (i=0;i<PolyGonB.nNode;i++)
    114.   {
    115.     CenterOfPolygonBX+=PolyGonB.Node[i].x;
    116.     CenterOfPolygonBY+=PolyGonB.Node[i].y;
    117.   }
    118.    CenterOfPolygonBX=CenterOfPolygonBX/PolyGonB.nNode;
    119.    CenterOfPolygonBY=CenterOfPolygonBY/PolyGonB.nNode;        /* 得到多边形 B 的形心  */

    120.   PolyGonB.cx=CenterOfPolygonBX;
    121.   PolyGonB.cy=CenterOfPolygonBY;

    122. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

    123.   i=0;
    124.   j=0;

    125.   pNode1=(NODE *)malloc(sizeof(NODE)*PolyGonA.nNode);
    126.   pNode2=(NODE *)malloc(sizeof(NODE)*PolyGonA.nNode);  /*  临时顶点数组初始化 */

    127.   for(k=0;k<PolyGonA.nNode;k++)
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛