專(zhuān)利名稱(chēng):房屋面積測(cè)量計(jì)算系統(tǒng)集成的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種房屋面積測(cè)量計(jì)算系統(tǒng)集成,包括硬件和計(jì)算軟件。
背景技術(shù):
目前的房屋測(cè)繪方法是在房屋建好后人工使用尺或測(cè)距儀,將測(cè)量結(jié)果記錄下來(lái)另行計(jì)算。這種方法存在以下幾個(gè)不便1.尺寸使用人工抄寫(xiě),容易出錯(cuò);2.測(cè)量人員在現(xiàn)場(chǎng)手工繪制實(shí)際建筑圖,不精確而且容易漏掉邊角;3.測(cè)量時(shí)間長(zhǎng),中等規(guī)模的樓每棟需要一至兩天時(shí)間;4.存在人為修改實(shí)際測(cè)量值的可能;5.某些面積計(jì)算方法不容易被接受,對(duì)測(cè)量人員素質(zhì)要求高;6.若計(jì)算規(guī)則改變,返回計(jì)算難度大。
目前還沒(méi)有合適的自動(dòng)化工具來(lái)實(shí)現(xiàn)房屋面積的自動(dòng)測(cè)量和計(jì)算方法。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種自動(dòng)化工具來(lái)實(shí)現(xiàn)房屋面積的自動(dòng)測(cè)量和計(jì)算方法系統(tǒng)的軟硬件的集合,通過(guò)該系統(tǒng)集合作出符合國(guó)家表標(biāo)準(zhǔn)的計(jì)算結(jié)果,并打印出相應(yīng)的存檔硬拷貝。
上述的目的通過(guò)以下的技術(shù)方案實(shí)現(xiàn)房屋面積測(cè)量計(jì)算系統(tǒng)集成,其組成包括工業(yè)控制單板機(jī),所述的單板機(jī)的輸入裝置包括15-21鍵小鍵盤(pán),球跡鼠標(biāo)、觸摸屏和/或激光測(cè)距儀,所述的單板機(jī)的輸出設(shè)備包括所述的液晶觸摸屏、外接打印機(jī)和外接硬盤(pán),以及電池,所述的單板機(jī)中裝有房屋面積測(cè)量計(jì)算系統(tǒng)軟件。
所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成中,所述的軟件包括文件存取、繪圖、參數(shù)修正、計(jì)算、重繪、打印等模塊,進(jìn)行房屋測(cè)繪中的預(yù)先草圖繪制、現(xiàn)場(chǎng)數(shù)據(jù)輸入及參數(shù)修正、按比例對(duì)實(shí)圖放大縮小進(jìn)行重建、數(shù)據(jù)計(jì)算、各種所需數(shù)據(jù)打印等功能模塊,采用ANSIC和C++混合編程。
這個(gè)技術(shù)方案有以下有益效果1.本系統(tǒng)的開(kāi)發(fā)由于采用PC104微型計(jì)算機(jī)作為硬件平臺(tái),因此需要在分辨率為640*480的DOS環(huán)境的圖形模式,采用C語(yǔ)言對(duì)圖形繪制、處理、運(yùn)算等進(jìn)行編程。由于DOS環(huán)境下可供使用的內(nèi)存比較小,因此在圖形可視化編程過(guò)程中,需要不斷的對(duì)程序進(jìn)行優(yōu)化,實(shí)現(xiàn)對(duì)內(nèi)存的合理使用,從而在DOS環(huán)境下,利用編程實(shí)現(xiàn)了利用鼠標(biāo)控制的仿WINDOWS可視化操作界面。
2.建筑面積測(cè)繪是一個(gè)比較復(fù)雜的測(cè)量和計(jì)算過(guò)程,本系統(tǒng)在設(shè)計(jì)過(guò)程中,根據(jù)國(guó)家建筑面積測(cè)繪標(biāo)準(zhǔn),采用面向?qū)ο蟮腃++圖形編程,實(shí)現(xiàn)了對(duì)各種形狀面積的計(jì)算,并實(shí)現(xiàn)了公有面積的一次分?jǐn)偤投畏謹(jǐn)偂?br>
3.由于本系統(tǒng)采用中文可視化界面,在開(kāi)發(fā)過(guò)程中采用了C語(yǔ)言DOS環(huán)境下漢字庫(kù)的調(diào)用技術(shù),漢字庫(kù)為希望漢字系統(tǒng)的16位點(diǎn)陣宋體字庫(kù)。采用PLC5(Printer Command Language)打印機(jī)命令語(yǔ)言,實(shí)現(xiàn)在了DOS環(huán)境下激光打印機(jī)的驅(qū)動(dòng)。
4.本產(chǎn)品的硬件采用PC-104微型計(jì)算機(jī)加小液晶顯示器,顯示器側(cè)面裝有自定義含有15-21個(gè)鍵的鍵盤(pán),可外接鼠標(biāo)、測(cè)距儀??梢宰孕芯幹茰y(cè)量計(jì)算軟件,可以嚴(yán)格的按照國(guó)家標(biāo)準(zhǔn)對(duì)距離和面積進(jìn)行測(cè)量。
5.操作簡(jiǎn)便,計(jì)算過(guò)程自動(dòng)化,測(cè)量人員只要將數(shù)據(jù)輸入馬上就可得到計(jì)算結(jié)果;測(cè)量精度高,能精確到毫米級(jí)且可對(duì)精度調(diào)整;6.操作圖形界面化,先制圖后計(jì)算,避免漏測(cè)和誤測(cè);計(jì)算規(guī)則可根據(jù)國(guó)家標(biāo)準(zhǔn)的更新而改變;體積小,只有字典大小,攜帶方便。
7.軟件包括房屋測(cè)繪中的預(yù)先草圖繪制、現(xiàn)場(chǎng)數(shù)據(jù)輸入及參數(shù)修正、按比例對(duì)實(shí)圖放大縮小進(jìn)行重建、數(shù)據(jù)計(jì)算、各種所需數(shù)據(jù)打印等功能模塊,所以運(yùn)行速度快、軟件所占空間小(只有269k),可以只用一個(gè)電子盤(pán)(8M)就能裝下所有的應(yīng)用軟件和存儲(chǔ)數(shù)據(jù)。
附圖1是本發(fā)明的結(jié)構(gòu)示意圖。
本發(fā)明的
具體實(shí)施例方式實(shí)施例1房屋面積測(cè)量計(jì)算系統(tǒng)集成,其組成包括裝載主機(jī)箱5中的工業(yè)控制單板機(jī),所述的單板機(jī)的輸入裝置包括15-21鍵小鍵盤(pán)1,球跡鼠標(biāo)2、觸摸屏3和/或激光測(cè)距儀,所述的單板機(jī)的輸出設(shè)備包括所述的液晶觸摸屏3、外接打印機(jī)和外接硬盤(pán),接口為4,以及電池,所述的單板機(jī)中裝有房屋面積測(cè)量計(jì)算系統(tǒng)軟件。
其中1.硬件部分的構(gòu)件詳述如下
主機(jī)板采用PC\104系列單板工業(yè)控制機(jī)處理器-ZFx86 CPU系統(tǒng)芯片集-板上集成16MB/32MB系統(tǒng)內(nèi)存BIOS -Phoenix BIOS 4.0 Revision 6-C&T69000 LCD/CRT視頻加速器2MB SDRAM,LCD和在板視頻 CRT同步顯示640×480×24bpp、800×600×24bpp、1024×768×16bpp、1280×1024×8bpp,在板LAN -Realtek RTL8139C 10/100Mbps以太控制器IDE控制器 -一個(gè)Ultra33通道,支持2個(gè)EIDE設(shè)備USB接口 -二個(gè)USB接口多I/O接口 -一個(gè)FDD接口、一個(gè)并口、二個(gè)RS-232、一個(gè)PS/2鍵盤(pán)/鼠標(biāo)接口、一個(gè)115kbps IrDA接口固態(tài)盤(pán)接口-CompactFlash接口電子盤(pán)看門(mén)狗定時(shí)器 -1~255秒可編程擴(kuò)充總線(xiàn) -PC/104電源 -單+5V電源供電,5V/900mA(典型值)外形尺寸 -96mm×90mm工作溫度 --10℃~60℃相對(duì)濕度 -5%--90%,非凝結(jié)輸入設(shè)備自制小鍵盤(pán)自制15鍵小鍵盤(pán),包括“0~9”“A”“G”“Z”“回車(chē)”“刪除”鍵。這些鍵是根據(jù)軟件系統(tǒng)的設(shè)計(jì)而定的。鍵盤(pán)采用標(biāo)準(zhǔn)的鍵盤(pán)設(shè)計(jì)方法,采用標(biāo)準(zhǔn)的鍵盤(pán)連接線(xiàn)連接到主機(jī)板的ps/2鍵盤(pán)口上。
軌跡球鼠標(biāo)用ps/2鼠標(biāo)連接線(xiàn)連接到主機(jī)板的ps/2接口上。因?yàn)檐壽E球鼠標(biāo)定為比較精確,用戶(hù)可以比較精確、方便的利用鼠標(biāo)完成房屋圖紙的繪制工作。
液晶觸摸屏我們采用東芝9英寸的黑白夜景觸摸屏。用專(zhuān)用的15針視頻連接線(xiàn)連接到主機(jī)板上的VGA/LCD顯示輸出接口??刂平涌谥苯舆B接到主機(jī)板的LCD控制接口上。
用戶(hù)可以在液晶觸摸屏上通過(guò)點(diǎn)擊菜單來(lái)實(shí)現(xiàn)對(duì)系統(tǒng)的操作。簡(jiǎn)單方便。
激光測(cè)距儀Pro4型激光測(cè)距儀,體積188×70×47mm,重量440g,測(cè)量精度1.5mm/100m測(cè)量距離0.2~100m接口RS232串行口用標(biāo)準(zhǔn)串口線(xiàn)連接到主機(jī)板的串口上輸出設(shè)備液晶觸摸屏同上(它既是輸入設(shè)備又是輸出設(shè)備)外接打印機(jī)用并口線(xiàn)連接到主機(jī)板的并行接口上,打印機(jī)是用來(lái)輸出測(cè)繪的圖紙和數(shù)據(jù)的外接硬盤(pán)用標(biāo)準(zhǔn)的硬盤(pán)線(xiàn)連接到主機(jī)板的IDE接口上,電源需要單獨(dú)提供,用來(lái)備份和導(dǎo)出采集到的測(cè)量數(shù)據(jù)和圖紙。
電池我們采用900mA鋰電池對(duì)系統(tǒng)進(jìn)行供電,將電池內(nèi)置到機(jī)箱內(nèi)。一般情況下系統(tǒng)可以連續(xù)工作4個(gè)小時(shí)以上。
2.軟件部分說(shuō)明軟件設(shè)計(jì)階段遵循的原則如下根據(jù)國(guó)家標(biāo)準(zhǔn)規(guī)定的具體測(cè)繪過(guò)程、計(jì)算過(guò)程、出圖過(guò)程進(jìn)行需求分析,此軟件需要進(jìn)行文件存取、繪圖、參數(shù)修正、計(jì)算、重繪、打印等模塊。
本系統(tǒng)采用圖形界面,視圖直觀(guān)而且便于操作,圖形界面的定義如下<pre listing-type="program-listing">#define_NOCURSOR_#ifndef_DRAW_#define_DRAW_#include″mouse.h″#include″frame.h″class Drawpublic mouse,public FRAME {protected int Oldx,Oldy;<dp n="d4"/>int X,Y,X1,Y1,X2,Y2,X3,Y3;publicvoid DrawLine();void DrawRectangle();void DrawArc();void DrawUnregule();void DrawTra();void DrawSti();void DrawCor();void DelRec();void DelArc();void DelUrg();void DelTra();void DelSti();void DelCor();};#endif#ifndef_FILE_#define_FILE_#include″str.h″#include″frame.h″#include″box.h″class Filepublic FRAME,public BASEBOX,public STRING{protectedint NewFileFunc;int MX,MY,MX1,MY1,MX2,MY2,MX3,MY3,MX4,MY4,MX5,MY5,MX6,MY6,MX7,MY7,MX9,MY9,MXA,MYA,y[6];int width,height,i;void*FileBuf;// FILE*fp;unsigned size;publicvoid FileChoose(int Func);void FileChoose();void FileInput(int Func_1);void FileInput();void FileCaculate(int Func_2);void FileCaculate();void FilePrint(int Func_3);void FilePrint();void FileDash();void FileHelp(int Func_4);void FileHelp();void File_New();void File_Save();void File_Save(char*FileName);void File_New_Path();void File_Open_Path();void File_Quit();void File_Open(char*FileName);void File_Open();void File_Input(char*FileName);<dp n="d5"/> void File_Input();void File_Rebuild();void File_All_Area();void File_Public_Area();void File_Build_Area();void File_Sell_Area();void File_All_Print();void File_Each_Print();void File_Build_Print();void File_Sell_Print();void File_All_Print(char*FileName);void File_Each_Print(char*FileName);void File_Build_Print(char*FileName);void File_Sell_Print(char*FileName);void File_Otx();void File_Help1();void File_Help2();void File_rec_eq(int f);void File_urg_eq(int f);void File_arc_eq(int f);void File_tra_eq(int f);void File_sti_eq(int f);void File_cor_eq(int f);// void File_Draw_Pic();};#endif#ifndef_GET_#define_GET_class Get_spublic File{protectedint NX,NY;char Chang[15];publicfloat get_sh(char*shujuming);};#endif#ifndef_OUT_#define_OUT_class Out_Scrpublic File{//protected//int SX,SY; //char*shuju;publicvoid out_scr(int SX,int SY,float shuju);};#endif#define_NOCURSOR_#ifndef_INPUT_#define_INPUT_<dp n="d6"/>#include″mouse.h″#include″frame.h″class Inputpublic File//Get_s{publicvoid InputRec();void InputUrg();void InputArc();void InputCor();void InputTra();void InputSti();};#endif</pre>2.各模塊的實(shí)現(xiàn)過(guò)程說(shuō)明如下2.1文件存取首先使用initgraph(&driver,&mode,″″);對(duì)DOS操作系統(tǒng)進(jìn)行圖形界面的初始化。主界面定義為<pre listing-type="program-listing">class FRAME{ protectedint i,MaxX,MaxY,OX,OY;int Left,Top,Right,Bottom;int FillStyle;int AllFunc; publicvoid DrawFrame();void Rect(int,int,int,int,int);void PutMessage(char*Msg);void DrawMenu(); // void DrawFillstyle();void WriteXY(int,int);void Writedxdy(int,int);};#endif</pre>鼠標(biāo)的各種圖形定義<pre listing-type="program-listing">#ifndef_MOUSE_#define_MOUSE_#include<dos.h>#include<stdio.h>class mouse{ private union REGS ireg,oreg; publicchar Reset();void Show_Mouse();void Hide_Mouse();char Left_Pressed();char Right_Pressed();void Get_XY(int*x,int*y);void Set_XY(int x,int y);void Set_X_Range(int min,int max);void Set_Y_Range(int min,int max);void Set_Graphic_Cursor(int x,int y,unsigned int*pattern);<dp n="d7"/>int Motion(int*x,int*y);};#ifndef_NOCURSOR_unsigned Cursor[7][32]={{//Cursor
-------->hand//Screen Mask0xE1FF, 0xE1FF, 0xE1FF, 0xE1FF, 0xE1FF, 0xE000, 0xE000, 0xE000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, //corsor Mask 0x1E00, 0x1200, 0x1200, 0x1200, 0x1200, 0x13FF, 0x1249, 0x1249, 0xF249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x8001, 0xFFFF }, { //cursor[1]--------->arrow //screen mask 0x3FFF, 0x1FFF, 0x0FFF, 0x07FF, 0x03FF, 0x01FF, 0x00FF, 0x007F, 0x003F, 0x001F, 0x01FF, 0x10FF, 0x30FF,<dp n="d8"/> 0xF87F,0xF87F,0xFC3F,//cursor mask 0x0000,0x4000,0x6000,0x7000,0x7800,0x7C00,0x7E00,0x7F00,0x7F80,0x7FC0,0x6C00,0x4600,0x0600,0x0300,0x0300,0x0180},{//cursor[2]--------->cross//screen mask 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,//cursor mask 0x0200,0x0200,0x0200,0x0200,0x0200,0x0000,0xF8F8,0x0000,0x0200,0x0200,0x0200,0x0200,0x0200,0x0000,0x0000,0x0000}<dp n="d9"/>};#elseextern unsigned Cursor[7][32];#endif//_nocursor_define#endif//end of mouse define</pre>使用M.Get_XY(&Main_X,&Main_Y);Main_X=(Main_X-40)/70;Main_Y=Main_Y/20; 取得鼠標(biāo)位置。
新建文件使用void File::FileChoose()函數(shù)新建普通面積、總面積、公有面積、二次總面積、二次公有面積中的任意一種,每種看成一個(gè)文件,使用fopen(Filename,”name”)函數(shù)形成一個(gè)文件,其中包含數(shù)據(jù)寫(xiě)入緩沖區(qū),設(shè)置寫(xiě)入模式setwritemode(COPY_PUT);,使用一系列的Rect(Left+12,30*10+14*4-5,Left+10+68,30*10+14*5+4,1)等函數(shù)設(shè)置對(duì)話(huà)框,輸入使用顯示屏右面的數(shù)字鍵盤(pán),按enter間確認(rèn),按backspace鍵進(jìn)行修改,鍵盤(pán)上設(shè)有總面積和二次面積等的快捷鍵,進(jìn)行文件編號(hào)時(shí)可以直接使用,如z001代表一號(hào)樓總面積。
參數(shù)修正使用Title(MX-150,MY-45,MX+150,MY+45,″Load File″);設(shè)置彈出對(duì)話(huà)框,將激光測(cè)距儀的溫度、氣壓、加常數(shù)、乘常數(shù)寫(xiě)入文件以便在以后進(jìn)行加權(quán)計(jì)算;新建樓號(hào)使用fopen(Filename,”name”)函數(shù)將被測(cè)量和計(jì)算的整棟大樓的樓號(hào)輸入數(shù)據(jù)緩沖區(qū);使用PutMessage(″Hit Esc or choose Cancel to end.″);進(jìn)行操作提示。
打開(kāi)樓號(hào)使用fopen()函數(shù)打開(kāi)一個(gè)已經(jīng)存在的文件,退出使用fclose()函數(shù)并設(shè)置setwritemode(COPY_PUT);將以形成的文件數(shù)據(jù)寫(xiě)入數(shù)據(jù)緩沖區(qū)。
2.2繪圖功能繪圖應(yīng)能采用各種手段完成建筑圖紙的繪制、刪除、修改、重建、保存、退出。
各種圖形的實(shí)現(xiàn)方法定義如下2.2.1矩形房間和房間內(nèi)的柱子實(shí)現(xiàn)如下柱子<pre listing-type="program-listing">extern CORNER{char Cor_Name[2]; //such as zs,ys,zx,yxfloat Cor_X,<dp n="d10"/>Cor_Y, Cor_long, Cor_width, Cor_area;}zs,ys,zx,yx; //left_up,...right_down//struct</pre>矩形房間<pre listing-type="program-listing">REC_ROOM//define rectangle room attribute{char Rec_RoomName[2];//such as A1float rx0,//original pointry0, rw_long, //the wall total x-lengthrw_width,//the wall total y-lengthrt_area,//the all area include the corner areararea;//the useful area of the roomCORNER zs,ys,zx,yx;};#endif#endif</pre>主要使用rectangle(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);Get_XY(&Oldx,&Oldy);WriteXY(Oldx-OX,Oldy-OY);rectangle(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);記錄下矩形房間的長(zhǎng)和寬長(zhǎng)度2.2.2不規(guī)則房間代表走廊或呈不規(guī)則形狀的房間,要求房間的形狀橫平豎直,畫(huà)線(xiàn)時(shí)直線(xiàn)可以稍微有水平或垂直偏差,但不能超過(guò)3度。房間里可以有柱子或圓樓梯,但不能有其他東西。
<pre listing-type="program-listing">URG_ROOM{ int end_line;char Urg_RoomName[2];float ux[20],uy[20],rux[20],ruy[20],//the real point distanceu_long[20], u_hou[20], u_length,//the wall lengthu_length_z, //the zheng area of the roomu_length_f, //the fu area of the roomu_t, //the urg wall thickness<dp n="d11"/>zs_long, //the zs corner longzs_width,//the zs corner width ys_long, ys_width, zx_long, zx_width, yx_long, yx_width, u_t_area,//the urg wall areaut_area, uarea_1, //urg total areauarea; //usefut area};</pre>2.2.3弧形房間代表由弦和弧圍成的曲面形狀的房間,如呈弧形突出的陽(yáng)臺(tái),室內(nèi)曲面的墻、不等寬的圓樓梯等。
<pre listing-type="program-listing">ARC_ROOM{char Arc_RoomName[2]; int arc_label;float X,Y,S,E,c_2, arc_radius, r_arc_h, r_long, //the real arc heightr_arc_radius,//the real arc radiusarc_w, //the arc wall thicknessat_w_area, at_area, aarea_1, //the all areaaarea; //the useful area};</pre>2.2.4梯形房間代表梯形房間或陽(yáng)臺(tái)、樓梯,要求房間的上下兩邊平行且不相等,左右兩邊不平行,房間里可以有柱子或圓樓梯,但不能有其他東西。
<pre listing-type="program-listing">TRA ROOM{ int end_line1;char Tra_RoomName[2];float tx[4],//no.1 original pointty[4], //tx20, //no.2 original point //ty20, t_h, //tra height<dp n="d12"/>// tw_1_long,//the wall total x-length// tw_2_long,//the wall total y-lengthrtw_1_long, rtw_1_t, //the wall total x-lengthrtw_2_long, rtw_2_t, //the wall total y-lengthlw_long, lw_t, //the left wall thicknessrw_long, //the top wall thicknessrw_t, //the right wall thickness //the bottom wall thicknesszs_long, //the zs corner longzs_width, //the zs corner widthys_long, ys_width, yx_long, zx_width, yx_long, yx_width, tw_area, //the wall areatt_area, tarea_1, //the all area include the corner areatarea;//the useful area of the room};</pre>2.2.5圓樓梯代表樓梯等寬的回旋型樓梯。
<pre listing-type="program-listing">STI_ROOM{char Sti_RoomName[2];float X,Y,S,E,c_2,arc_radius,arc_radius1,arc_1_long,arc_s_x0,arc_s_y0,arc_s_x1,arc_s_y1,//the arc start point end point arc_h,arc_h1,arc_s_x00,arc_s_y00,arc_s_x11,arc_s_y11,<dp n="d13"/>s_arc_h, //the real arc heights_arc_h1, s_arc_1_radius,//the real arc radiuss_arc_2_radius, sarea_1, //the real arc radiussarea; //the useful area};</pre>2.3面積計(jì)算根據(jù)上述的作圖實(shí)現(xiàn)方法,每劃出一條線(xiàn)計(jì)算機(jī)都記錄了線(xiàn)段的長(zhǎng)度、弧線(xiàn)的弧度、梯形的高度等數(shù)據(jù),根據(jù)這些數(shù)據(jù)計(jì)算出房間的面積,計(jì)算方法如下矩形房間面積計(jì)算包括使用面積和墻體面積,使用面積計(jì)算為房間的長(zhǎng)乘寬float cacu_area(float rn_rw_long,float rn_rw_width){float area=rn_rw_long*rn_rw_width;return area;}墻體面積為四面墻的使用面積之和,但按國(guó)標(biāo)為避免因?yàn)閴Φ拈L(zhǎng)短不同和外墻面積與內(nèi)墻面積計(jì)算所帶來(lái)的矛盾(國(guó)標(biāo)規(guī)定外墻面積計(jì)算按墻體厚度一半計(jì)算),采用算法為其中標(biāo)有灰色的部分采用的是長(zhǎng)乘寬除2的算法,因?yàn)槊棵嫱鈮Χ妓阋话?,而每面?nèi)墻都和另一面內(nèi)墻公用所以也算一半,這種算法能正確計(jì)算出墻體面積,簡(jiǎn)稱(chēng)為追尾算法,正確性證明略。實(shí)現(xiàn)過(guò)程如下float A1_total_area=cacu_area(A1.rw_long,A1.rw_width);float A1_corner1_area=cacu area(A1.rc1_long,A1.rc1_width);float A1_corner2_area=cacu_area(A1.rc2_long,A1.rc1_width);float A1_corner3_area=cacu_area(A1.rc3_long,A1.rc3_width);float A1_corner4_area=cacu_area(A1.rc4_long,A1.rc4_width);A1.rarea=A1_total_area-A1_corner1_area-A1_corner2_area-A1_corner3_area-A1_corner4_area;不規(guī)則房間不規(guī)則房間指那些主要由直角彎組成的面積但不是矩形,如走廊,方廳等。
不規(guī)則房間由連續(xù)線(xiàn)段畫(huà)出,主要使用的是line()函數(shù),其算法由起始點(diǎn)作為坐標(biāo)原點(diǎn),計(jì)算后續(xù)點(diǎn)所構(gòu)成的各象限的矩形的面積矢量和,具體如下<pre listing-type="program-listing">void Input::InputUrg(){ extern URG_ROOM urg[4];setcolor(RED);o=0;SetView();Hide_Mouse();urg[f].rux
=0;urg[f].ruy
=0;for(int j=0;j<urg[f].end_line;j++){do{ o=1-o;setcolor(change[o]);line(urg[f].ux[j]+80,urg[f].uy[j]+50,urg[f].ux[j+1]+80,urg[f].uy[j+1]+50);delay(300);} while(!kbhit());setcolor(WHITE);line(urg[f].ux[j]+80,urg[f].uy[j]+50,urg[f].ux[j+1]+80,urg[f].uy[j+1]+50);char temp_key=getch();urg[f].u_length=G.get_sh(″墻長(zhǎng)″);//qiang chang″);urg[f].u_long[j]=urg[f].u_length;urg[f].u_t=G.get_sh(″墻厚″);//qiang hou″);urg[f].u_hou[j]=urg[f].u_t;if(fabs(urg[f].ux[j]-urg[f].ux[j+1])<=3) {if(urg[f].uy[j]<urg[f].uy[j+1])//3{ urg[f].rux[j+1]=urg[f].rux[j];urg[f].ruy[j+1]=urg[f].ruy[j]+urg[f].u_length;urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;}if(urg[f].uy[j]>urg[f].uy[j+1])//4{ urg[f].rux[j+1]=urg[f].rux[j];urg[f].ruy[j+1]=urg[f].ruy[j]-urg[f].u_length;urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;<dp n="d15"/>}}if(fabs(urg[f].uy[j]-urg[f].uy[j+1])<=3){//1if(urg[f].ux[j]<urg[f].ux[j+1]){ urg[f].ruy[j+1]=urg[f].ruy[j];urg[f].rux[j+1]=urg[f].rux[j]+urg[f].u_length;if(urg[f].uy[j]<=urg[f].uy
)urg[f].u_length_z=urg[f].u_length_z+urg[f].u_length*fabs(urg[f].ruy[j]);if(urg[f].uy[j]>urg[f].uy
)urg[f].u_length_f=urg[f].u_length_f+urg[f].u_length*fabs(urg[f].ruy[j]);urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;}if(urg[f].ux[j]>urg[f].ux[j+1]){//2 urg[f].ruy[j+1]=urg[f].ruy[j];urg[f].rux[j+1]=urg[f].rux[j]-urg[f].u_length;if(urg[f].uy[j]>=urg[f].uy
)urg[f].u_length_z=urg[f].u_length_z+urg[f].u_length*fabs(urg[f].ruy[j]);if(urg[f].uy[j]<urg[f].uy
)urg[f].u_length_f=urg[f].u_length_f+urg[f].u_length*fabs(urg[f].ruy[j]);urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;}</pre>弧形房間有弧形陽(yáng)臺(tái)及其他弧形面積,也包括弧形墻體周長(zhǎng)的使用面積,弧形畫(huà)法采用的是給出弧兩個(gè)端點(diǎn)的位置和弧高,計(jì)算使用標(biāo)準(zhǔn)的弧形面積計(jì)算方法,由于需在任意位置劃出弧形,弧形畫(huà)法的算法為計(jì)算各象限的轉(zhuǎn)角,然后畫(huà)弧,這一部分的算法如下<pre listing-type="program-listing">////file name=arc-1.cpp//#include″Drawarc.h″#include<graphics.h><dp n="d16"/>#include<conio.h>#include<string.h>#include<process.h>#include<math.h>#define Esc 27char Ch;extern Color;int OX,OY;void Draw::Drawarc(){ static int dx=20,dy=20;DrawFrame();PutMessage(″Press right button\ to change size and direction″);setviewport(Left+1,Top+1,Right-1,Bottom-1,1);setcolor(Color);setwritemode(XOR_PUT);Get_XY(&amp;Oldx,&amp;Oldy);line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);double jiao=1.014-atan2((double)dx,(double)dy);double radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);int arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);Writedxdy(dx,dy);while(1){ if(Motion(&amp;X,&amp;Y)) {line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY); jiao=1.014-atan2((double)dx,(double)dy);radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;<dp n="d17"/> (int)realjiao2=realjiao1+60; arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);Get_XY(&amp;Oldx,&amp;Oldy);WriteXY(Oldx-OX,Oldy-OY);line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);jiao=1.014-atan2((double)dx,(double)dy);radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);arc_x,arc_y,realjiao1,realjiao2; (int)arc_x=Oldx-OX-radius*sin(jiao); (int)arc_y=Oldy-OY+radius*cos(jiao); (int)realjiao1=180*jiao/3.14; (int)realjiao2=realjiao1+60; arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);}// if(!Inside(Oldx,Oldy,Left,Top,Right,Bottom)) //break; if(kbhit())if((Ch=getch())==Esc){ Reset(); closegraph(); exit(1);} if(Left_Pressed()) { Set_X_Range(Left+1,Right-1); Set_Y_Range(Top+1,Bottom-1); setwritemode(COPY_PUT); line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);jiao=1.014-atan2((double)dx,(double)dy);radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);arc_x,arc_y,realjiao1,realjiao2; (int)arc_x=Oldx-OX-radius*sin(jiao); (int)arc_y=Oldy-OY+radius*cos(jiao); (int)realjiao1=180*jiao/3.14; (int)realjiao2=realjiao1+60; arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);while(Left_Pressed()){ if(Motion(&amp;X,&amp;Y)) { Get_XY(&amp;Oldx,&amp;Oldy);WriteXY(Oldx-OX,Oldy-OY);line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);<dp n="d18"/> jiao=1.014-atan2((double)dx,(double)dy); radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy); arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);} }setwritemode(XOR_PUT);line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY); jiao=1.014-atan2((double)dx,(double)dy); radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy); arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius); Set_X_Range(1,MaxX-1); Set_Y_Range(1,MaxY-1); }if(Right_Pressed()){ Set_XY(Oldx+dx,Oldy+dy); while(Right_Pressed()) {if(Motion(&amp;X,&amp;Y)){line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY); jiao=1.014-atan2((double)dx,(double)dy); radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy); arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);Get_XY(&amp;X,&amp;Y);dx=X-Oldx;dy=Y(jié)-Oldy;Writedxdy(dx,dy);<dp n="d19"/> line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY); jiao=1.014-atan2((double)dx,(double)dy); radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy); arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);} } Set_XY(Oldx,Oldy);} }line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY); jiao=1.014-atan2((double)dx,(double)dy); radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy); arc_x,arc_y,realjiao1,realjiao2;(int)arc_x=Oldx-OX-radius*sin(jiao);(int)arc_y=Oldy-OY+radius*cos(jiao);(int)realjiao1=180*jiao/3.14;(int)realjiao2=realjiao1+60;arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius); setwritemode(COPY_PUT); setviewport(0,0,MaxX,MaxY,1);}</pre>梯形房間與矩形房間類(lèi)似,但計(jì)算面積是按標(biāo)準(zhǔn)的梯形計(jì)算法,此外,梯形房間由于在建筑圖中處于非正向位置,所以梯形房間在繪圖時(shí)可以旋轉(zhuǎn)角度以與建筑圖一致,其旋轉(zhuǎn)算法如下<pre listing-type="program-listing">void Draw::DrawTra(){extern TRA_ROOM tra[2];int Flad,NewX,NewY,i=0; // Draw::DrawUnregule()DrawFrame();// 按右鍵結(jié)束畫(huà)梯形PutMessage(″″);show_hz(″按右鍵結(jié)束畫(huà)梯形″,3,461,BLACK);// PutMessage(″Press right button to stop tiking″);setviewport(Left+1,Top+1,Right-1,Bottom-1,1);setcolor(Color);Writedxdy(0,0);<dp n="d20"/>setwritemode(XOR_PUT);Set_Graphic_Cursor(6,6,Cursor[2]);while(Left_Pressed());Get_XY(&amp;Oldx,&amp;Oldy);setcolor(LIGHTGRAY);line(Oldx-OX,0,Oldx-OX,Bottom);line(0,Oldy-OY,Right,Oldy-OY);setcolor(WHITE); //Draw::DrawUnregule()while(1){if(Motion(&amp;X1,&amp;Y1)){setcolor(LIGHTGRAY);line(Oldx-OX,0,Oldx-OX,Bottom);line(0,Oldy-OY,Right,Oldy-OY);setcolor(WHITE);Get_XY(&amp;Oldx,&amp;Oldy);WriteXY(Oldx-41,Oldy-21);setcolor(LIGHTGRAY);line(Oldx-OX,0,Oldx-OX,Bottom);line(0,Oldy-OY,Right,Oldy-OY);setcolor(WHITE);}if(kbhit())if((Ch=getch())==Esc){Reset(); //Draw::DrawUnregule()closegraph();exit(1);}if(Left_Pressed()){setviewport(Left+1,Top+1,Right-1,Bottom-1,1);Set_X_Range(Left+1,Right-1);Set_Y_Range(Top+1,Bottom-1);Get_XY(&amp;NewX,&amp;NewY);setcolor(LIGHTGRAY);line(NewX-OX,0,NewX-OX,Bottom);line(0,NewY-OY,Right,NewY-OY);setcolor(WHITE);Oldx=NewX;Oldy=NewY;<dp n="d21"/>Set_XY(Oldx,Oldy);Flad=1;setcolor(LIGHTGRAY);line(NewX-OX,0,NewX-OX,Bottom);line(0,NewY-OY,Right,NewY-OY);setcolor(WHITE);while(Left_Pressed())while(Flad) //Draw::DrawUnregule(){if(Motion(&amp;X,&amp;Y)){Get_XY(&amp;X,&amp;Y);{line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);setcolor(LIGHTGRAY);line(NewX-OX,0,NewX-OX,Bottom);line(0,NewY-OY,Right,NewY-OY);setcolor(WHITE);NewX=X;NewY=Y(jié);//Draw::DrawUnregule()WriteXY(X-41,Y-21);line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);setcolor(LIGHTGRAY);line(NewX-OX,0,NewX-OX,Bottom);line(0,NewY-OY,Right,NewY-OY);setcolor(WHITE);Writedxdy(NewX-Oldx,NewY-Oldy);}}else if(Left_Pressed()){while(Left_Pressed())setwritemode(COPY_PUT);line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);Set_XY(NewX,NewY);Oldx=NewX;Oldy=NewY;tra[b-8].tx[i]=Oldx-80; //Draw::DrawUnregule()tra[b-8].ty[i]=Oldy-50; i++;<dp n="d22"/>setwritemode(XOR_PUT);}else if(Right_Pressed()){setcolor(LIGHTGRAY);line(NewX-OX,0,NewX-OX,Bottom);line(0,NewY-OY,Right,NewY-OY);setcolor(WHITE);Flad=0;line(tra[b-8].tx[i-1]+39,tra[b-8].ty[i-1]+29,tra[b-8].tx
+39,tra[b-8].ty
+29);Set_X_Range(1,MaxX);Set_Y_Range(1,MaxY); //Draw::DrawUnregule()break;}}break;//end of while(Flad)}//end of Left_pressed}//end of whilesetwritemode(COPY_PUT);setviewport(0,0,MaxX,MaxY,1);//Draw::DrawUnregule()Set_Graphic_Cursor(4,0,Cursor
);Show_Mouse();F1.File_New();}</pre>旋轉(zhuǎn)樓梯方形樓梯的面積可按矩形面積計(jì)算,而旋轉(zhuǎn)樓梯可看成是兩個(gè)弧形面積的差,所以其畫(huà)法和面積計(jì)算算法可有弧形面積得出,但樓梯與弧形房間的不同之處在于沒(méi)有墻體面積。
計(jì)算菜單當(dāng)上述各種形狀的面積分別算出之后,須根據(jù)國(guó)標(biāo)計(jì)算總面積、公有面積、分?jǐn)傁禂?shù)、二次總面積、二次公有面積、二次分?jǐn)傁禂?shù)。以《中華人民共和國(guó)國(guó)家計(jì)量技術(shù)規(guī)范》JJF1058-1998《商品房銷(xiāo)售面積測(cè)量與計(jì)算》為例,采用規(guī)定算法進(jìn)行計(jì)算。這部分算法簡(jiǎn)單,只是將各面積累加即可,故略。
2.4打印分別打印各種普通面積、總面積、公有面積、使用面積、建筑面積、銷(xiāo)售面積,采用HP6L打印機(jī),在DOS操作系統(tǒng)下的打印方法定義為void open_hzk(void);void get_hz(char incode[],char bytes[]);void dishz(int x,int y,char cade[],int color);void show_hz(char far*s,int x,int y,int hz_color);void printscr(int px0,int py0,int px1,int py1,int hz_color);void readscr(int px0,int py0,int px1,int py1);int shlbit(unsigned char c,int m,int n);3.本軟件的使用說(shuō)明3.1基本界面3.1.1屏幕上方為菜單欄,分為文件、輸入、計(jì)算、打印、幫助五欄,用鼠標(biāo)在每個(gè)條目上點(diǎn)擊將出現(xiàn)下拉菜單,再用鼠標(biāo)點(diǎn)擊進(jìn)行具體操作。
3.1.2屏幕左方為繪圖工具欄,每個(gè)按鈕代表一種房間樣式,左邊一列代表20個(gè)矩形房間,右邊上面四個(gè)代表不規(guī)則房間,接下來(lái)分別是四個(gè)弧形,兩個(gè)梯形,兩個(gè)圓樓梯,七個(gè)代表柱子的角,右邊最下面的代表門(mén)。繪圖欄最下面有一個(gè)大按鈕,在新建時(shí)顯示保存,按此按鈕將畫(huà)好的圖形存入磁盤(pán),同時(shí)圖形消失。這些繪圖工具基本上可以繪制出任何房間的結(jié)構(gòu)圖,每個(gè)按鈕所代表的房間面積除弧形外都是正面積,弧形負(fù)面積用于曲面房間。
3.1.3屏幕下方為信息欄,顯示各項(xiàng)當(dāng)前操作規(guī)則。
3.1.4屏幕左上在繪圖時(shí)有一交叉的十字,用于選取基準(zhǔn)點(diǎn)。
3.1.5屏幕右上繪圖時(shí)有相對(duì)坐標(biāo)和絕對(duì)坐標(biāo)顯示,絕對(duì)坐標(biāo)表示基準(zhǔn)線(xiàn)交點(diǎn)的當(dāng)前位置,相對(duì)坐標(biāo)表示與前一坐標(biāo)點(diǎn)的相對(duì)位置。
注意繪圖的原則是封閉,即房間之間不存在嵌套。如圖形復(fù)雜則將圖細(xì)分以避免嵌套。每套住戶(hù)或總面積應(yīng)不超過(guò)20個(gè)矩形房間、四個(gè)不規(guī)則房間、四個(gè)弧型、兩個(gè)梯形、兩個(gè)圓樓梯、七個(gè)柱子,30個(gè)門(mén)。不規(guī)則房間邊不超過(guò)20個(gè),每個(gè)房間最多可有四個(gè)柱子。
3.2.繪圖功能新建階段繪圖欄各按鈕功能如下3.2.1矩形房間代表標(biāo)準(zhǔn)的矩形樣式的房間或走廊、樓梯,房間里可以有柱子或圓樓梯,但不能有其他東西。點(diǎn)擊按鈕后可在屏幕上看到一個(gè)矩形,基準(zhǔn)線(xiàn)的交點(diǎn)代表矩形的左上角,拖動(dòng)鼠標(biāo)可帶動(dòng)矩形在屏幕上移動(dòng),如要改變矩形大小,按右鍵將看到基準(zhǔn)線(xiàn)交點(diǎn)移到右下角,按住右鍵不放拖動(dòng)矩形大小發(fā)生變化,松開(kāi)右鍵基線(xiàn)交點(diǎn)又回到左上角,再拖動(dòng)鼠標(biāo)將其定位,此過(guò)程可反復(fù)進(jìn)行直到在合適位置畫(huà)上合適大小的矩形,按左鍵結(jié)束。
3.2.2不規(guī)則房間代表走廊或呈不規(guī)則形狀的房間,要求房間的形狀橫平豎直,畫(huà)線(xiàn)時(shí)直線(xiàn)可以稍微有水平或垂直偏差,但不能超過(guò)3度。房間里可以有柱子或圓樓梯,但不能有其他東西。鼠標(biāo)點(diǎn)擊按鈕后屏幕上出現(xiàn)的基準(zhǔn)線(xiàn)交點(diǎn)即不規(guī)則房間的起始點(diǎn),拖動(dòng)鼠標(biāo)可選擇起始點(diǎn),按左健將起始點(diǎn)定位,再拖動(dòng)鼠標(biāo)將看到有一條線(xiàn)連著起始點(diǎn),選擇合適位置后按鼠標(biāo)左鍵確定,將看到此直線(xiàn)已被固定,繼續(xù)拖動(dòng)鼠標(biāo)又有一條與上一點(diǎn)連接的直線(xiàn)出現(xiàn),重復(fù)此過(guò)程直至畫(huà)完不規(guī)則房間,最后的點(diǎn)應(yīng)與最開(kāi)始的點(diǎn)重合,重合后按右鍵結(jié)束。
3.2.3弧形房間代表由弦和弧圍成的曲面形狀的房間,如呈弧形突出的陽(yáng)臺(tái),室內(nèi)曲面的墻、不等寬的圓樓梯等。梯形和弧形搭配表示復(fù)雜曲面。點(diǎn)擊按鈕后基準(zhǔn)線(xiàn)的交點(diǎn)代表弧的一個(gè)端點(diǎn),拖動(dòng)鼠標(biāo)在屏幕上找到合適位置后按左鍵確定,再拖動(dòng)鼠標(biāo)可看到又一端點(diǎn),再按左鍵確定,如果弦水平,第一點(diǎn)在左則弧將向上鼓,第一點(diǎn)在右則弧將向下鼓,如果弦垂直,第一點(diǎn)在上則弧將向右鼓,第一點(diǎn)在下則弧將向左鼓,此時(shí)出現(xiàn)對(duì)話(huà)框輸入弧高,如果此弧的弦為水平或垂直或弧向上鼓輸入正的弧高,如果弧向下鼓輸入負(fù)的弧高,輸入單位為米,按Enter結(jié)束輸入,輸入后即可看到一條弧,畫(huà)弧結(jié)束。
3.2.4梯形房間代表梯形房間或陽(yáng)臺(tái)、樓梯,要求房間的上下兩邊平行且不相等,左右兩邊不平行,房間里可以有柱子或圓樓梯,但不能有其他東西。梯形和弧形搭配表示復(fù)雜曲面。梯形房間畫(huà)法近似不規(guī)則房間,但要求先畫(huà)上底或下底,在畫(huà)完第三條邊后按右鍵結(jié)束。
3.2.5圓樓梯代表樓梯等寬的回旋型樓梯。樓梯內(nèi)弧畫(huà)法同畫(huà)弧,但輸入弧高后還要求輸入樓梯寬,輸入后按Enter鍵將出現(xiàn)一個(gè)圓樓梯結(jié)束。
3.2.6柱子代表高層住宅房間內(nèi)的立柱、通風(fēng)井及其他屋內(nèi)障礙物,可加到任何房間。畫(huà)法同矩形房間。
注意以上每個(gè)房間圖形在繪圖任意時(shí)刻需要改動(dòng)時(shí),在代表該房間的按鈕上按右鍵,該房間就會(huì)消失。再按左鍵重畫(huà)。
3.2.7保存保存畫(huà)好的圖形。按此大鍵后出現(xiàn)保存提示框,鍵盤(pán)輸入文件名,輸入錯(cuò)誤可按回格鍵逐個(gè)刪除,文件命名規(guī)則為普通面積第一個(gè)字符取除“z”“g”外的字母,以后的字符取數(shù)字,如“a1”、“b2”??偯娣e第一個(gè)字符取“z”,第二個(gè)字符取數(shù)字,如“z1”,如是二次分?jǐn)偪偯娣e再加一位數(shù)字,如“z11”、“z12”,公有面積第一個(gè)字符取“g”,第二個(gè)字符取數(shù)字,如“g1”、“g2”,二次分?jǐn)偣忻娣e再加一位數(shù)字,如“g12”、“g12”。
3.3.文件菜單操作包括新建、參數(shù)修正、打開(kāi)樓號(hào)、新建樓號(hào)、退出。每項(xiàng)功能如下3.3.1新建樓號(hào)新建整棟樓的編號(hào),用鍵盤(pán)敲入數(shù)字,如001、002等,輸入錯(cuò)誤可按回格鍵逐個(gè)刪除,其中包括各種面積,如果樓號(hào)已經(jīng)存在,則在提示欄顯示此樓號(hào)已存在,3.3.2參數(shù)修正繪圖和數(shù)據(jù)輸入前依次輸入當(dāng)前溫度、當(dāng)前氣壓、加常數(shù)、乘常數(shù)。
3.3.3打開(kāi)樓號(hào)打開(kāi)已存在的樓號(hào),用鍵盤(pán)敲入數(shù)字,如001、002等,輸入錯(cuò)誤可按回格鍵逐個(gè)刪除,打開(kāi)樓號(hào)后才可對(duì)各種面積進(jìn)行操作。
3.3.4新建出現(xiàn)三種面積的提示,普通面積指住戶(hù)的戶(hù)型,總面積指整棟樓的外輪廓,公有面積指公共的使用面積,如樓梯,電梯間等,用鼠標(biāo)在三種面積之一前面的方框內(nèi)點(diǎn)擊選擇,選擇后提示欄消失,再在幫助菜單欄打開(kāi)比例尺設(shè)定,出現(xiàn)提示欄顯示輸入比例。用鍵盤(pán)輸入作圖與實(shí)際尺寸比例。
注意本繪圖界面繪圖區(qū)范圍用點(diǎn)距表示為580×400,而實(shí)際測(cè)量尺寸的單位為米,長(zhǎng)度和面積計(jì)算可以精確到毫米和平方毫米級(jí)。所以在表示時(shí)應(yīng)輸入顯示比例。如輸入40,則最大可以輸入580×400×40m/1000=23.2m×16m的面積,在輸入實(shí)際弧形拱高0.5米時(shí),圖中顯示拱高40×0.5=20個(gè)點(diǎn)距。如畫(huà)大面積的總面積圖時(shí)比例應(yīng)加大,如加到200,即圖上每個(gè)點(diǎn)代表實(shí)際的0.2米,100個(gè)點(diǎn)代表100×0.2=20米。默認(rèn)普通面積輸入比例為30,總面積輸入比例為200。
3.3.5退出結(jié)束本次操作退出。
3.4.輸入菜單操作包括打開(kāi)、輸入、重建三項(xiàng)操作。
注意輸入之前應(yīng)在文件菜單中打開(kāi)樓號(hào)。公有面積和總面積應(yīng)在輸入數(shù)值后再輸入層數(shù)。
3.4.1打開(kāi)打開(kāi)已畫(huà)好的房間文件。按打開(kāi)后出現(xiàn)打開(kāi)文件名提示框,用鍵盤(pán)輸入已存在的文件名,屏幕上將出現(xiàn)已畫(huà)好的房間樣式。如果打開(kāi)錯(cuò)誤按繪圖欄的大按鈕退出。
3.4.2輸入左鍵點(diǎn)擊已有的各房間代表按鈕,按提示用鍵盤(pán)輸入各房間的實(shí)際測(cè)量尺寸,其中墻厚按實(shí)際整墻厚輸入,如果此處無(wú)墻則輸入墻厚為0,房間內(nèi)柱子數(shù)按實(shí)際個(gè)數(shù)輸入,數(shù)據(jù)輸入錯(cuò)誤可按回格鍵逐個(gè)刪除,數(shù)據(jù)輸入用Enter結(jié)束,結(jié)束后可看到一組參考數(shù)值在屏幕上出現(xiàn),上面代表此房間的使用面積,下面代表此房間的建筑面積。
注意輸入時(shí)直接按Enter表示值為0。弧形房間面積有正負(fù),0代表正面積,1代表負(fù)面積,負(fù)面積是為與梯形房間配合表示復(fù)雜曲面時(shí)用。
3.4.3重建點(diǎn)擊重建后每個(gè)房間的大小將根據(jù)實(shí)際尺寸發(fā)生變化,此時(shí)再點(diǎn)擊繪圖欄的按鈕將每個(gè)房間位置重新分布,不規(guī)則房間應(yīng)根據(jù)矩形房間的位置重新分布。房間全部定位后,按繪圖欄右面最下的按鈕畫(huà)門(mén),鼠標(biāo)左鍵點(diǎn)擊基準(zhǔn)線(xiàn)交點(diǎn)代表門(mén)樞,再拖動(dòng)鼠標(biāo)確定門(mén)在墻上的位置,按左鍵后確定門(mén)的大小及位置,此時(shí)彈出對(duì)話(huà)框輸入門(mén)的開(kāi)向,1代表向里開(kāi),-1代表向外開(kāi),按Enter確定門(mén)的開(kāi)向,如果畫(huà)錯(cuò)右鍵點(diǎn)擊畫(huà)門(mén)按鈕刪除,再按左鍵重畫(huà)。重建后按繪圖欄大按鈕保存,文件名應(yīng)輸入打開(kāi)時(shí)采用的文件名。
注意輸入總面積和公有面積的面積和層數(shù)后應(yīng)馬上在計(jì)算菜單計(jì)算總面積和公有面積。二次總面積和二次公有面積及二次分?jǐn)傁禂?shù)也應(yīng)在輸入完成后馬上計(jì)算。
3.5.計(jì)算菜單操作包括總面積、公有面積、分?jǐn)傁禂?shù)、二次總面積、二次公有面積、二次分?jǐn)傁禂?shù)。鼠標(biāo)左鍵點(diǎn)擊每個(gè)部分將在屏幕下面顯示參考值。
3.5.1總面積本樓的外輪廓樣式×層數(shù)的累加和。單位平方米。
3.5.2公有面積本樓的公有部分面積×層數(shù)的累加和。單位平方米。
3.5.3分?jǐn)傁禂?shù)公有面積/(總面積—公有面積)。
注意當(dāng)本樓有住宅和商戶(hù)區(qū)時(shí),住宅的總面積及公有面積和商戶(hù)的總面積及公有面積需要按比例分?jǐn)偅?.5.4二次總面積住宅或商戶(hù)的按比例分配的公有面積與私有的總面積和。單位平方米。
3.5.5二次公有面積住宅或商戶(hù)的按比例分配的公有面積與私有的公有面積和。單位平方米。
3.5.6二次分?jǐn)傁禂?shù)分?jǐn)偟墓忻娣e與私有的公有面積和/(私有的總面積-私有的公有面積)。3.6.打印菜單操作包括整體面積、使用面積、建筑面積、銷(xiāo)售面積。鼠標(biāo)點(diǎn)擊每項(xiàng)將刷新屏幕,顯示房間結(jié)構(gòu)圖,按Esc將取消打印進(jìn)入房間詳細(xì)數(shù)據(jù)界面,按Enter將打印該圖同時(shí)進(jìn)入房間詳細(xì)數(shù)據(jù)界面,進(jìn)入房間詳細(xì)數(shù)據(jù)界面后按Esc將取消打印房間詳細(xì)數(shù)據(jù)界面,暫停后返回原始屏幕。每項(xiàng)打印的區(qū)別在于根據(jù)打印需要打印不同的數(shù)據(jù)。
3.6.1整體面積本項(xiàng)可打印普通面積、總面積或公有面積。
3.6.2使用面積本項(xiàng)包括整體面積的所有內(nèi)容,增加了使用面積。
3.6.3建筑面積本項(xiàng)包括使用面積的所有內(nèi)容,增加了使用面積和建筑面積。
3.6.4銷(xiāo)售面積本項(xiàng)包括建筑面積的所有內(nèi)容,增加了使用面積、建筑面積和銷(xiāo)售面積。
軟件系統(tǒng)的安裝通過(guò)軟盤(pán)驅(qū)動(dòng)器,將DOS6.22操作系統(tǒng)想安裝到固態(tài)電子盤(pán)上,大約需要3M的空間。然后將測(cè)量體統(tǒng)軟件(約200k)和config.sys、autoexec.bat兩個(gè)配置文件拷貝到電子盤(pán)中。重新開(kāi)機(jī),系統(tǒng)將直接引導(dǎo)進(jìn)入測(cè)量系統(tǒng)主窗口,用戶(hù)可以利用液晶觸摸屏、軌跡球鼠標(biāo)和小鍵板對(duì)系統(tǒng)進(jìn)行操作了。當(dāng)需要測(cè)量時(shí),將激光測(cè)距儀隊(duì)準(zhǔn)被測(cè)房間的一個(gè)被測(cè)距離,按下測(cè)量鍵,激光測(cè)距儀將自動(dòng)將測(cè)量到的距離數(shù)據(jù),通過(guò)串口送到計(jì)算機(jī)內(nèi),系統(tǒng)自動(dòng)保存該距離數(shù)據(jù),用作后面房屋面積計(jì)算時(shí)使用。整個(gè)主機(jī)尺寸21cm×15cm×8cm。
權(quán)利要求
1.一種房屋面積測(cè)量計(jì)算系統(tǒng)集成,其組成包括工業(yè)控制單板機(jī),其特征是所述的單板機(jī)的輸入裝置包括15-21鍵小鍵盤(pán),球跡鼠標(biāo)、觸摸屏和/或激光測(cè)距儀,所述的單板機(jī)的輸出設(shè)備包括所述的液晶觸摸屏、外接打印機(jī)和外接硬盤(pán),以及電池,所述的單板機(jī)中裝有房屋面積測(cè)量計(jì)算系統(tǒng)軟件。
2.根據(jù)權(quán)利要求1所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是所述的軟件包括文件存取、繪圖、參數(shù)修正、計(jì)算、重繪、打印等模塊,進(jìn)行房屋測(cè)繪中的預(yù)先草圖繪制、現(xiàn)場(chǎng)數(shù)據(jù)輸入及參數(shù)修正、按比例對(duì)實(shí)圖放大縮小進(jìn)行重建、數(shù)據(jù)計(jì)算、各種所需數(shù)據(jù)打印等功能模塊,采用ANSI C和C++混合編程。
3.根據(jù)權(quán)利要求2所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是該計(jì)算系統(tǒng)采用圖形界面。
4.根據(jù)權(quán)利要求2或3所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是所述的文件存取,包括首先使用initgraph(& driver,& mode``)對(duì)DOS操作系統(tǒng)進(jìn)行圖形界面的初始化,然后新建文件,進(jìn)行參數(shù)修正將激光測(cè)距儀的溫度、氣壓、加常數(shù)、乘常數(shù)寫(xiě)入文件以便在以后進(jìn)行加權(quán)計(jì)算;新建樓號(hào)使用fopen(Filename,”name”)函數(shù)將被測(cè)量和計(jì)算的整棟大樓的樓號(hào)輸入數(shù)據(jù)緩沖區(qū);使用PutMessage(″Hit Esc or chooseCancel to end.″);進(jìn)行操作提示;打開(kāi)樓號(hào)使用fopen()函數(shù)打開(kāi)一個(gè)已經(jīng)存在的文件;退出。
5.根據(jù)權(quán)利要求2或3所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是所述的繪圖包括建筑圖紙的繪制、刪除、修改、重建、保存、退出,所述的繪圖的種類(lèi)包括繪制矩形房間和房間內(nèi)的柱子、矩形房間、不規(guī)則房間、弧形房間、梯形房間、圓樓梯。
6.根據(jù)權(quán)利要求2或3所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是所述的參數(shù)修正和數(shù)據(jù)計(jì)算包括矩形房間面積計(jì)算包括使用面積和墻體面積,使用面積計(jì)算為房間的長(zhǎng)乘寬;不規(guī)則房間不規(guī)則房間指那些主要由直角彎組成的面積但不是矩形,如走廊,方廳等;不規(guī)則房間由連續(xù)線(xiàn)段畫(huà)出,主要使用的是line()函數(shù),其算法由起始點(diǎn)作為坐標(biāo)原點(diǎn),計(jì)算后續(xù)點(diǎn)所構(gòu)成的各象限的矩形的面積矢量和;弧形房間有弧形陽(yáng)臺(tái)及其他弧形面積,也包括弧形墻體周長(zhǎng)的使用面積,弧形畫(huà)法采用的是給出弧兩個(gè)端點(diǎn)的位置和弧高,計(jì)算使用標(biāo)準(zhǔn)的弧形面積計(jì)算方法,由于需在任意位置劃出弧形,弧形畫(huà)法的算法為計(jì)算各象限的轉(zhuǎn)角,然后畫(huà)??;梯形房間與矩形房間類(lèi)似,但計(jì)算面積是按標(biāo)準(zhǔn)的梯形計(jì)算法,此外,梯形房間由于在建筑圖中處于非正向位置,所以梯形房間在繪圖時(shí)可以旋轉(zhuǎn)角度以與建筑圖一致;旋轉(zhuǎn)樓梯方形樓梯的面積可按矩形面積計(jì)算,而旋轉(zhuǎn)樓梯可看成是兩個(gè)弧形面積的差,所以其畫(huà)法和面積計(jì)算算法可有弧形面積得出,但樓梯與弧形房間的不同之處在于沒(méi)有墻體面積;計(jì)算菜單當(dāng)上述各種形狀的面積分別算出之后,須根據(jù)國(guó)標(biāo)計(jì)算總面積、公有面積、分?jǐn)傁禂?shù)、二次總面積、二次公有面積、二次分?jǐn)傁禂?shù),以《中華人民共和國(guó)國(guó)家計(jì)量技術(shù)規(guī)范》JJF1058-1998《商品房銷(xiāo)售面積測(cè)量與計(jì)算》為例,采用規(guī)定算法進(jìn)行計(jì)算,這部分算法簡(jiǎn)單,只是將各面積按規(guī)定累加即可。
7.根據(jù)權(quán)利要求2或3所述的房屋面積測(cè)量計(jì)算系統(tǒng)集成,其特征是所述的各種所需數(shù)據(jù)打印包括分別打印各種普通面積、總面積、公有面積、使用面積、建筑面積、銷(xiāo)售面積。
全文摘要
房屋面積測(cè)量計(jì)算系統(tǒng)集成,涉及一種房屋面積測(cè)量計(jì)算系統(tǒng)集成,包括硬件和計(jì)算軟件。目前的房屋測(cè)繪方法是在房屋建好后人工使用尺或測(cè)距儀,將測(cè)量結(jié)果記錄下來(lái)另行計(jì)算。目前還沒(méi)有合適的自動(dòng)化工具來(lái)實(shí)現(xiàn)房屋面積的自動(dòng)測(cè)量和計(jì)算方法。房屋面積測(cè)量計(jì)算系統(tǒng)集成,其組成包括裝在主機(jī)箱5中的工業(yè)控制單板機(jī),所述的單板機(jī)的輸入裝置包括15-21鍵小鍵盤(pán)1,球跡鼠標(biāo)2、觸摸屏3和/或激光測(cè)距儀,所述的單板機(jī)的輸出設(shè)備包括所述的液晶觸摸屏3、外接打印機(jī)和外接硬盤(pán),接口為4,以及電池,所述的單板機(jī)中裝有房屋面積測(cè)量計(jì)算系統(tǒng)軟件。本產(chǎn)品用作便攜式的房屋面積測(cè)量計(jì)算設(shè)備。
文檔編號(hào)G06F9/445GK1567192SQ0313248
公開(kāi)日2005年1月19日 申請(qǐng)日期2003年7月3日 優(yōu)先權(quán)日2003年7月3日
發(fā)明者程欣, 李彬 申請(qǐng)人:程欣, 李彬