明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2048|回复: 2

高手帮个啊忙啊

[复制链接]
发表于 2006-9-2 14:09:00 | 显示全部楼层 |阅读模式

本人第一次编的程序,出现了连接错误,想了几天得不到答案,高手帮忙啊,谢了,急!!!!!!!!!!!!

#include "math.h"
//#include"gept2dar.h"
#include"geline2d.h"
//#include"acarray.h"
#include"gepnt2d.h"
#include"gelnsg2d.h"


//以下为计算凸多边形面积方法  
double areaofchimb(AcGePoint2dArray&ptarr)
{
AcGePoint2d *p=&ptarr.at(0);
   int i;
  int n;//点的个数
 
  n=ptarr.length();
  AcGePoint2d startpoint=ptarr.first();
  AcGePoint2d endpoint=ptarr.last();

//求顶点到其余点的对角线长
 double*arry=new double[n-3];

 for(i=0;i<n-3;i++)
//    arry=(ptarr.at(0)).distanceTo(ptarr.at(i+2));
arry=ptarr[0].distanceTo(ptarr[i+2]);
//求面积
    double area=0;
 int j=0;
  for(j=0;j<n-2;j++)
  { double a;
 a=startpoint.distanceTo(ptarr[j+1]);
 // a=ads_distance(ptarr[0],ptarr[j+1]);
 double b;
    b=(ptarr[j+1]).distanceTo(ptarr[j+2]);
// b=ads_distance(ptarr[j+1],ptarr[j+2]);
    double d;
    if (j<n-3)
  d=arry[j];
  else
    d=startpoint.distanceTo(endpoint);
//   d=ads_distance(ptarr[0],ptarr[n-1]);
    double c=(a+b+d)/2;
    double s=sqrt(c*(c-a)*(c-b)*(c-d));
    area+=s;
  }
 return area; 
}


//计算多边形面积        !!需要修改,补凸的时候可能使临近两点变凹  
double area(AcGePoint2dArray &ptarr)

 bool  PointInPolygon(AcGePoint2d& pt,AcGePoint2dArray &ptarr);
    double areaoftriangle(AcGePoint2d ,AcGePoint2d,AcGePoint2d );
    int n;//点的个数
 n=4;
    ptarr.at(0).set(10,10);
    ptarr.at(1).set(10,20);
    ptarr.at(2).set(20,20);
    ptarr.at(3).set(20,10);


 double area=0;
    double s=0;
    int i;
 for(i=0;i<n;i++)
 {double s=0;
 AcGePoint2d*ppt=new AcGePoint2d(ptarr.at(i));
    ptarr.removeAt(i);
    bool flag;
 flag=PointInPolygon(*ppt,ptarr);
  if(flag==true) ptarr.insertAt(i,*ppt);
  else
   {AcGeLine2d*line=new AcGeLine2d(ptarr.at((i-1+n-1)%(n-1)),ptarr.at((i+n-1)%(n-1)));
  
    AcGePoint2d newpoint=(*ppt).mirror(*line);
       ptarr.insertAt(i,newpoint);
    s=s-2*(areaoftriangle(ptarr.at((n+i-1)%n),ptarr.at(i),ptarr.at((n+i+1)%n)));
   }
 }
 area=areaofchimb(ptarr);
 area=area-s;
 return area;

}


//以下判断点是否在多边形中,在返回false ,不在返回true    
bool  PointInPolygon(AcGePoint2d& pt,AcGePoint2dArray &ptarr)
{
 int n = ptarr.length();
    int i, count=0;                               
 double yup, xup, ydown, xdown;
// double y0, x0;
 double t;
 for( i=0; i< n; i++ )
 {
  if((pt.x ==(ptarr.at(i).x)&&(pt.y==ptarr.at(i).y)             //!!检查括号匹配不??
   || (pt.x==(ptarr.at((i+1)%n).x))&&(pt.y==(ptarr.at((i+1)%n).y))))
        return true;
 xup=(ptarr.at(i)).x>(ptarr.at((i+1)%n).x)?(ptarr.at(i)).xptarr.at((i+1)%n).x);
 yup=(ptarr.at(i)).y>(ptarr.at((i+1)%n).y)?(ptarr.at(i)).yptarr.at((i+1)%n).y);
 xdown=(ptarr.at(i)).x<(ptarr.at((i+1)%n).x)?(ptarr.at(i)).xptarr.at((i+1)%n).x);
 ydown=yup=(ptarr.at(i)).y<(ptarr.at((i+1)%n).y)?(ptarr.at(i)).yptarr.at((i+1)%n).y);
   if(pt.y>yup)
    continue;
   if(pt.y<ydown)
    continue;
   if(pt.y==ydown)
     if(pt.y<yup&&pt.x<xdown)  count++;
  else continue;
   if(pt.y<yup&&pt.y>ydown)
    double  t=xdown+(pt.y-ydown)*(xup-xdown)/(yup-ydown);
 if(t>pt.x)  count++;
 if(t=pt.x)  return true;
 }
  if(count%2==0)  return false;
  else
   return true;
}

//计算三角形面积 
 double areaoftriangle(AcGePoint2d pt1,AcGePoint2d pt2,AcGePoint2d pt3)
 {
  double a,b,c,l,s;
     a=pt1.distanceTo(pt2);
     b=pt2.distanceTo(pt3);
     c=pt3.distanceTo(pt1);
     l=(a+b+c)/2;
     s=sqrt(l*(l-a)*(l-b)*(l-c));
     return s;
 }

--------------------Configuration: Lab5Command - Win32 Debug--------------------
Linking...
   Creating library Debug/Lab5Command.lib and object Debug/Lab5Command.exp
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: double __thiscall AcGePoint2d::distanceTo(class AcGePoint2d const &)const " (__imp_?distanceTo@AcGePoint2d@@QBENABV1@@Z)
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall AcGePoint2d::AcGePoint2d(class AcGePoint2d const &)" (__imp_??0AcGePoint2d@@QAE@ABV0@@Z)
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class AcGePoint2d & __thiscall AcGePoint2d::mirror(class AcGeLine2d const &)" (__imp_?mirror@AcGePoint2d@@QAEAAV1@ABVAcGeLine2d@@@Z)
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall AcGeLine2d::AcGeLine2d(class AcGePoint2d const &,class AcGePoint2d const &)" (__imp_??0AcGeLine2d@@QAE@ABVAcGePoint2d@@0@Z)
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class AcGePoint2d & __thiscall AcGePoint2d::set(double,double)" (__imp_?set@AcGePoint2d@@QAEAAV1@NN@Z)
Lab5CommandMain.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall AcGePoint2d::AcGePoint2d(void)" (__imp_??0AcGePoint2d@@QAE@XZ)
.\..\Lab5Command.arx : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.

Lab5Command.arx - 7 error(s), 0 warning(s)

发表于 2006-9-8 09:54:00 | 显示全部楼层
要包含库文件:acge15.lib(视ARX的版本而定,以acge开头的)
发表于 2006-9-8 17:16:00 | 显示全部楼层

 if( (pt.x == (ptarr.at(i).x) && (pt.y==ptarr.at(i).y)  )           //!!检查括号匹配

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:27 , Processed in 0.187773 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表