找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1635|回复: 16

[ARX函数]:我的求面积的ARX代码

[复制链接]
发表于 2003-4-15 17:47:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
// RegionGraph.h: interface for the CRegionGraph class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_REGIONGRAPH_H__F0B13024_7238_44D7_9966_1F79DEC8EEED__INCLUDED_)
#define AFX_REGIONGRAPH_H__F0B13024_7238_44D7_9966_1F79DEC8EEED__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CRegionGraph  
{
public:
        AcGeVector3d getUcsZAxis(AcDbDatabase* db);
        AcGeVector3d getUcsYAxis(AcDbDatabase* db);
        AcGeVector3d getUcsXAxis(AcDbDatabase* db);
        AcGePlane getUcsPlane(AcDbDatabase* db);
//        AcDbObjectIdArray regionsArrayId;
//        AcGePoint2d centroid;
//        double area;
        int GetRegionsAreaProp(ads_point internalpt , double& area ,AcGePoint2d& centroid ,AcDbObjectIdArray& regions ,int& num );
        int GetBoundaryCommandObjects(ads_point internalpt ,AcDbObjectIdArray& regions);
        AcGePoint2d CentriodSub(double mass, AcGePoint2d& pt, double masssub, AcGePoint2d &ptsub);
        AcGePoint2d CentroidUnite(double mass1,AcGePoint2d &pt1,double mass2,AcGePoint2d &pt2 );
    Acad::ErrorStatus GetAreaProp( AcDbRegion *pregion,double& area ,AcGePoint2d& centroid );
        int BoundaryCMD(ads_point internalpt);
        CRegionGraph();
        virtual ~CRegionGraph();


};

#endif // !defined(AFX_REGIONGRAPH_H__F0B13024_7238_44D7_9966_1F79DEC8EEED__INCLUDED_)















// RegionGraph.cpp: implementation of the CRegionGraph class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "RegionGraph.h"
#include "dbregion.h"
#include "Select.h"
#include "geplane.h"
#include "gemat3d.h"
#include "dbxutil.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRegionGraph::CRegionGraph()
{

}

CRegionGraph::~CRegionGraph()
{

}



int CRegionGraph::BoundaryCMD(ads_point internalpt)
{
      
      
       int   err ;

     err = acedCommand(RTSTR, "boundary",RTSTR, "A", RTSTR, "O",RTSTR, "R",RTSTR, "B",RTSTR, "E",RTSTR, "",0);

    if( err != RTNORM)
        {
                 
                acutPrintf("\nBOUNDARYÉèÖø߼¶ÊôÐÔʧ°Ü");
                return err ;
        }




     err = acedCommand(RTPOINT,internalpt,RTSTR, "", 0) ;
          if( err != RTNORM )
                  {
                                
                              acutPrintf("\nÑ¡ÔñÄÚ²¿µãʧ°Ü");
                              return err ;
                  }

          
   return RTNORM;
}




Acad::ErrorStatus CRegionGraph::GetAreaProp(AcDbRegion *pregion ,
                                                                 double& area ,//·µ»Ø×ÜÃæ»ý
                                 AcGePoint2d& centroid //·µ»ØÖÊÁ¿ÖÐÐÄ
                                                            
                                                             )
{

         
AcDbDatabase* db = acdbHostApplicationServices()->workingDatabase();     
Acad::ErrorStatus err ;
     AcGePoint3d origin ;
     origin.set(0,0,0);
     AcGeVector3d xAxis;
xAxis = getUcsXAxis(db) ;
//xAxis.set(1,0,0) ;
     AcGeVector3d yAxis;
yAxis = getUcsYAxis(db) ;
//yAxis.set(0,1,0);
    double perimeter;
    //double area;
    //AcGePoint2d centroid;
    double momInertia[2];
    double prodInertia;
    double prinMoments[2];
    AcGeVector2d prinAxes[2];
    double radiiGyration[2];
    AcGePoint2d extentsLow ;
    AcGePoint2d extentsHigh ;
    err = pregion ->getAreaProp(origin, xAxis, yAxis,
    perimeter,
     area,
     centroid,
     momInertia,
     prodInertia,
     prinMoments,
     prinAxes,
     radiiGyration,
     extentsLow ,
      extentsHigh      
    ) ;


  return err ;

}





AcGePoint2d  CRegionGraph::CentroidUnite(double mass1, AcGePoint2d &pt1, double mass2, AcGePoint2d &pt2)
{
  AcGePoint2d centerpt ;
  centerpt.x =  (mass1 * pt1.x + mass2 * pt2.x)/(mass1+mass2) ;
  centerpt.y =  (mass1 * pt1.y + mass2 * pt2.y)/(mass1+mass2) ;
  return centerpt ;

}

AcGePoint2d CRegionGraph::CentriodSub(double mass, AcGePoint2d &pt, double masssub, AcGePoint2d &ptsub)
{
  AcGePoint2d centerpt ;
  centerpt.x = (mass * pt.x - masssub * ptsub.x)/(mass-masssub) ;
  centerpt.y = (mass * pt.y - masssub * ptsub.y)/(mass-masssub) ;
  return centerpt ;
}

int CRegionGraph::GetBoundaryCommandObjects(ads_point internalpt ,
                                                                                        AcDbObjectIdArray& regions)//·µ»ØÄ¿±ê¼¯ºÏ
{
  
    ads_name lname0 ,lname1 ,lastname;
//************************************************
        int err = acdbEntLast(lastname);
        if (err != RTNORM)
                {
                   acutPrintf("\n³õʼ»¯Ê§°Ü");
           return err;
                }

//--------------------------------------------------
                err = BoundaryCMD(internalpt) ;
        if (err != RTNORM)
                {
                   acutPrintf("\nBoundary µ÷ÓÃʧ°Ü");
           return err;
                }
//********************************************
                err = acdbEntNext(lastname, lname0) ;
           if (err != RTNORM )
           {
                 acutPrintf("\nûÓÐÉú³ÉÃæÓò");
         return err ;

           }

//**************************************************
          do {     
                  AcDbObjectId objId;

                 if (Acad::eOk != acdbGetObjectId(objId, lname0))
                                 {
                    acutPrintf("\n»ñÈ¡ObjectIdʧ°Ü");
                                        return RTERROR ;
                                 }
               
                  AcDbEntity *pEntity;
                  if (Acad::eOk !=acdbOpenAcDbEntity(pEntity, objId, AcDb::kForRead)) //ͨ¹ý¶ÔÏóID»ñÈ¡¶ÔÏó¾ä±úÖ¸Õë
                  {
                     acutPrintf("\n»ñÈ¡¶ÔÏó½øÐжÁ²Ù×÷ʧ°Ü");
                                         return RTERROR ;  
                                  }
                                  const char *pCname = pEntity->isA()->name();//»ñÈ¡¶ÔÏóÀàÃû
                  if(strcmp(pCname,"AcDbRegion") !=0)
                                  {
                      if (Acad::eOk != pEntity ->close())
                                          {
                                                 acutPrintf("\n¶ÔÏó¹Ø±Õʧ°Ü");
                                             return RTERROR ;  
                                          }

                                          continue ;
                                  }
                    AcDbRegion *pregion;
                    pregion=AcDbRegion::cast(pEntity);
                    if(pregion !=NULL)
                                        {
                                          
                                                regions.append(objId);
                                        }

                   if (Acad::eOk !=  pregion->close())
                                          {
                                                 acutPrintf("\nÃæÓò¶ÔÏó¹Ø±Õʧ°Ü");
                                             return RTERROR ;  
                                          }

                   if (Acad::eOk != pEntity ->close())
                                          {
                                                 acutPrintf("\n¶ÔÏó¹Ø±Õʧ°Ü");
                                             return RTERROR ;  
                                          }
                ads_name_set(lname0, lname1);
               
                  } while (acdbEntNext(lname1, lname0) == RTNORM );
//*****************************************************

          return RTNORM ;

}

int CRegionGraph::GetRegionsAreaProp(ads_point internalpt , //ÊäÈëÄÚ²¿Ò»µã
                                                                         double &area, //·µ»ØÃæ»ý
                                                                         AcGePoint2d &centroid ,//·µ»ØÖÊÁ¿ÖÐÐÄ
                                                                         AcDbObjectIdArray& regions , //·µ»Øregions¼¯ºÏ
                                                                         int& num  //·µ»ØÊýÁ¿
                                                                         )
{

   
        double areak = 0  ;
        area = 0 ;
    AcGePoint2d centroidk ;
        centroidk.set(0,0);
        centroid.set(0,0) ;
//*****************************************************
   int err = GetBoundaryCommandObjects(internalpt ,regions);
           if (err != RTNORM )
           {
        //         acutPrintf("\nûÓÐÃæÓòÉú³É");
         return err ;

           }
///****************************************************
   int length ;
   length = regions.length() ;
   num = length ;


  for (int i = 0 ; i < length ; i++)
  {
            
                      AcDbEntity *pEntity;
                  acdbOpenAcDbEntity(pEntity, regions, AcDb::kForRead); //&Iacute;¨&sup1;&yacute;&para;&Ocirc;&Iuml;óID&raquo;&ntilde;&Egrave;&iexcl;&para;&Ocirc;&Iuml;ó&frac34;&auml;±ú&Ouml;&cedil;&Otilde;&euml;
                  const char *pCname = pEntity->isA()->name();//&raquo;&ntilde;&Egrave;&iexcl;&para;&Ocirc;&Iuml;ó&Agrave;à&Atilde;&ucirc;
                  if(strcmp(pCname,"AcDbRegion") !=0)
                                  {
                      pEntity ->close();
                                          continue ;
                                  }
                    AcDbRegion *pregion;
                    pregion=AcDbRegion::cast(pEntity);
                    if (Acad::eOk != GetAreaProp(pregion,areak ,centroidk ))
                                        {
                                                 acutPrintf("\n&raquo;&ntilde;&Egrave;&iexcl;&micro;&Uacute;%d&cedil;&ouml;&Atilde;&aelig;&raquo;&yacute;&Ecirc;&ocirc;&ETH;&Ocirc;&Ecirc;§°&Uuml;",i+1);
                                                 return RTERROR ;  
                                        }
                                         
                                        if(i != 0)
                                        {
                                         areak = -areak ;
                                                                                               
                                        }
                                         // acutPrintf("\n&Atilde;&aelig;&raquo;&yacute;%.3f",areak);
//-----------------------------------------------------------------------
                        pregion->close();
                    pEntity->close();
                                        centroid = CentroidUnite(area ,centroid ,areak ,centroidk);
                    area = area + areak ;
                                  
  }
// acutPrintf("\n&Atilde;&aelig;&raquo;&yacute;%.3f",area);

return RTNORM ;  
}

//DEL int CRegionGraph::AreaAndCentroid(double& tolarea , AcGePoint2d& tolcentroid)
//DEL {
//DEL      ads_name sset;
//DEL     acedSSAdd(NULL, NULL, sset);//&acute;&acute;&frac12;¨&Ograve;&raquo;&cedil;&ouml;&iquest;&Otilde;&micro;&Auml;&Ntilde;&iexcl;&Ocirc;&ntilde;&frac14;&macr;
//DEL          CSelect sel ;
//DEL          tolarea = 0  ;
//DEL         tolcentroid.set(0,0) ;
//DEL
//DEL         for (int i = 0 ; i < 100 ; i++){
//DEL    //************************************************
//DEL      ads_point  internalpt ;
//DEL
//DEL      int   err = acedGetPoint( NULL,
//DEL            "\n&Ccedil;&euml;&Ntilde;&iexcl;&Ocirc;&ntilde;&Auml;&Uacute;&sup2;&iquest;&Ograve;&raquo;&micro;&atilde;,°&acute;ENTER&frac12;á&Ecirc;&oslash;!",internalpt) ;
//DEL      if (  err == RTNONE )
//DEL          {
//DEL                   sel.EarseS(sset);
//DEL           acedSSFree(sset);
//DEL           acutPrintf("\n&Euml;ù&Ntilde;&iexcl;&Ocirc;&ntilde;&Ccedil;&oslash;&Oacute;ò&micro;&Auml;×&Uuml;&Atilde;&aelig;&raquo;&yacute;&Icirc;&ordf;:%.3f mm^2",tolarea);
//DEL           acutPrintf("\n×&Uuml;&ETH;&Icirc;&ETH;&Auml;×&oslash;±ê&Icirc;&ordf;:[%.3f,%.3f] ",tolcentroid.x , tolcentroid.y);              
//DEL          return  err;
//DEL          }
//DEL      if (  err == RTCAN )
//DEL          {
//DEL                   sel.EarseS(sset);
//DEL            acedSSFree(sset);               
//DEL            return  err ;
//DEL          }
//DEL          if(err != RTNORM)
//DEL          {
//DEL         continue ;
//DEL          }
//DEL          if ( i==99 )
//DEL          {
//DEL                   sel.EarseS(sset);
//DEL            acedSSFree(sset);               
//DEL            
//DEL          }  
//DEL //***********************************************
//DEL   
//DEL         double area; //·&micro;&raquo;&Oslash;&Atilde;&aelig;&raquo;&yacute;
//DEL         AcGePoint2d centroid ;//·&micro;&raquo;&Oslash;&Ouml;&Ecirc;&Aacute;&iquest;&Ouml;&ETH;&ETH;&Auml;
//DEL         AcDbObjectIdArray regions ; //·&micro;&raquo;&Oslash;regions&frac14;&macr;&ordm;&Iuml;
//DEL         int num ; //·&micro;&raquo;&Oslash;&Ecirc;&yacute;&Aacute;&iquest;
//DEL                                                                          
//DEL     err= GetRegionsAreaProp(internalpt , area ,centroid ,regions ,num );
//DEL     if(err != RTNORM)
//DEL          {
//DEL         continue ;
//DEL          }
//DEL
//DEL         if (! regions.isEmpty()){
//DEL   
//DEL          int length ;
//DEL
//DEL          length = regions.length();
//DEL
//DEL      for (int k = 0 ; k < length ; k++)
//DEL          {
//DEL                  ads_name objName ;
//DEL          acdbGetAdsName( objName, regions[k]) ;
//DEL          acedSSAdd(objName , sset, sset);
//DEL          }
//DEL          sel.highlight(sset);
//DEL //---------------------------------------------
//DEL         tolcentroid = CentroidUnite(tolarea ,tolcentroid ,area ,centroid) ;
//DEL     tolarea += area ;
//DEL   
//DEL         }
//DEL         }
//DEL   
//DEL   return RTNORM  ;
//DEL
//DEL }


AcGePlane
CRegionGraph::getUcsPlane(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                AcGePlane ucsPlane(origin, xDir, yDir);
                return ucsPlane;
        }
        else {
                ASSERT(0);
        AcGePlane ucsPlane(AcGePoint3d::kOrigin, AcGeVector3d::kIdentity);
        return ucsPlane;
        }
}

//*****************************
AcGeVector3d
CRegionGraph::getUcsXAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return xDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kXAxis;
        }
}

/****************************************************************************
**
**        CRegionGraph::getUcsYAxis
**                returns current UCS Y Axis, even if currently the paperSpace viewport
**
**        **jma
*/
//*************************************/

AcGeVector3d
CRegionGraph::getUcsYAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return yDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kYAxis;
        }
}

/****************************************************************************
**
**        CRegionGraph::getUcsZAxis
**
**        **jma
**
*************************************/

AcGeVector3d
CRegionGraph::getUcsZAxis(AcDbDatabase* db)
{
        ASSERT(db != NULL);

    AcGeMatrix3d m;

        if (acdbUcsMatrix(m, db)) {
                AcGePoint3d origin;
                AcGeVector3d xDir, yDir, zDir;

                m.getCoordSystem(origin, xDir, yDir, zDir);
                return zDir;
        }
        else {
                ASSERT(0);
                return AcGeVector3d::kZAxis;
        }
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-7-30 15:53:31 | 显示全部楼层
可以可以发个程序给我,我急需算面积的。ylsy@yeah.net
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-30 17:59:04 | 显示全部楼层
算面积程序,很实用,只是代码太多了,能否稍作解释一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-31 09:17:40 | 显示全部楼层
以上代码实现创建一个面域AcDbRegion,然后根据面域求出面积!!
你可以新建一个工程,将代码复制到你的工程中,编译,跟踪一下看看!!
对于理解代码很有帮助的!!
:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-8 14:35:25 | 显示全部楼层
怎么注释全部都是乱码???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-30 09:07:46 | 显示全部楼层
对各边进行积分不就可以了,代码简短,不会超过20行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-11 15:49:06 | 显示全部楼层
我现在急需这方面的东东,你真帮了我的大忙,但有一些乱码,能否发到我的信箱:xgy2002615@hotmail.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-13 13:13:47 | 显示全部楼层
最初由 sy_sl 发布
[B]对各边进行积分不就可以了,代码简短,不会超过20行 [/B]


对凸多边形很好,但是凹多边形需要加不少判断吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-15 01:16:05 | 显示全部楼层
好东西,但是好多乱码啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-15 13:39:54 | 显示全部楼层
用boundary的,能不用这个就好了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-17 10:21:03 | 显示全部楼层
Select.h
文件没有?
编译每通过,这么回事~?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3532个

财富等级: 富可敌国

发表于 2003-12-17 23:59:53 | 显示全部楼层
好东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-23 19:13:41 | 显示全部楼层
能给一份到我的邮箱吗??
xinxiande@sina.com
多谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-24 20:27:43 | 显示全部楼层
此求面积的方法太差,没有考虑多连通域的问题。而且太复杂。
对线条形(不存在圆弧或拟合线)求面积一般还是采用积分好。x*y求和即可,有多连通域时先化为单连通域。一般就一个函数,50行以内吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-24 21:14:30 | 显示全部楼层
我也觉得不是很好,老是出问题的!
To wxsong,如果对应有圆弧和拟合线的呢,求面积,用积分可以算吗???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-11 06:35 , Processed in 0.265805 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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