毕业论文:简易日照分析计算器的算法研究和软件实现
目录
摘要: 3
关键词 3
ABSTRACT 4
KEY WORDS 4
1 引言: 5
2 需求和可行性分析 5
3 日照分析计算器的基本原理: 5
3.1 太阳赤纬Δ: 5
3.2 太阳高度角Α: 6
3.3 太阳方位角Β: 6
4 对日照分析模型的基本建模 6
4.1 对取光点的建模(HOUSE) 7
4.2 对遮挡建筑物的建模(OBSTACLE) 7
4.3 对太阳光线的建模(SUNLIGHT) 7
5 本软件中设计的相关类的重要属性和方法说明: 7
5.1 COORDINATE类(极坐标) 8
5.2 DATE类(日期) 8
5.3 TIME类(时刻) 8
5.4 LOCATION类(地理位置) 8
5.5 HOUSE类(住房即采光点) 8
5.6 OBSTACLE类(遮挡建筑物) 8
5.7 SUNLIGHT类(日光) 9
5.8 SHADOW类(日影) 9
5.9 DAYSHADOW类(每日日照) 9
5.10 YEARSHADOW类(年日照) 9
6 对单时刻日照情况的分析 9
6.1 太阳赤纬计算公式的实现: 9
6.2 太阳高度角公式的实现: 11
6.3 太阳方位角公式的实现(SUNLIGHE类中): 11
6.4 日影长度的计算: 12
6.5 取光点特殊时刻的光照情况的判定: 12
4.5.1太阳高度角小于等于0 13
4.5.2太阳高度角为90度时 13
4.5.3无遮挡物情况 13
4.5.4太阳光线方向与取光点取光方向垂直甚至于与取光方向相背 13
6.6 判定一般情况下日照: 14
4.6.1确定遮挡物中心的极径s(Obstacle类中) 14
4.6.2确定遮挡物四个角点的位置(Obstacle类中): 14
4.6.3区分单双面遮挡情况: 16
4.6.4单面遮挡情况下的日照分析: 17
4.6.5双面遮挡情况的日照分析: 18
7 对取光建筑物日照分析的时间分析: 20
7.1 采样时间间隔的选取 20
7.2 将日照分析拓展到一日,并统计特定日期的总日照时间: 21
7.3 将日照分析拓展到一年,并统计特定年份的总日照时间: 22
8 交互界面和使用实例 22
9 小结 23
10 本软件使用说明 25
参考文献: 26
摘要:本文旨在研究开发一个可面向普通用户的日照分析软件中的关键算法,要求依据算法设计出的日照分析软件实用简便快捷,且又有一定的可用性、精确性。文中对该类软件的需求背景作了简要阐述。从介绍一些日照分析中的关键概念和公式入手,经由用开发语言实现公式,到运用公式分析住宅特定时刻日照环境,再到对住宅时间段内日照环境的统计概述,最后将功能整合以供使用。本文中对日照的分析主要采用棒影法结合几何计算方法对建筑物日照与否进行判断,然后加入时间参数进行统计整合实现对住宅日照优劣的判定。
关键词:日照;采光;住宅环境;软件算法
Abstract
This article aims to research and development of a regular user of sunshine for the key algorithm analysis software, algorithm design requirements based on analysis of software utilities out of the sunshine simple and quick, and has some availability, accuracy. In this article, the demand for this type of software are briefly described the background. Introduce some sunshine from the analysis of the key con
……(新文秘网https://www.wm114.cn省略2711字,正式会员可完整阅读)……
的情况, 在分析中,本文将建筑物窗台或称取光处建模为一个质点。为使数据和公式中的角度相统一,也为了紧接着的各种相对位置的计算方便,不妨以取光点为坐标原点,以正南方向为坐标极轴,以太阳方位角的计量方法为模板建立极坐标系,即以正南为0°,向西增加为正,向东减少为负,最后合并于正北,为±180°。
4.1 对取光点的建模(House)
按照此方法可进行取光点的建模,如下
1.取光方向,记为House.toward,为取光点方向即窗户朝向在上述
坐标系中的表示。
2.取光点高度在日照分析中参与的运算简单,无需建立高度坐标,在本分析中,取光点高度记为h。
3. 取光点的地理位置统一在House.l中,l为Location模型(模型内容见附录Location类程序清单),记录了当地经纬度。到此取光点的建模完成。
4.2 对遮挡建筑物的建模(Obstacle)
本文将遮挡建筑物简化为长方体,以便于分析的实现且与实际常见的建筑物较为相符。建模如下:
1. 与取光点的水平方向关系;建模中仍以上述建立的极坐标为坐标系,
以障碍物中心为障碍物的实点,建立角度,记为 Obstacle. direction。
2. 与取光点的水平距离:模型中仍以障碍物中心为障碍物的实点,计算
该点与取光点的水平距离,记为Obstacle.s,由于这段距离中有部分位于建筑物中,不易测量,可由计算取得,故将Obstacle.s减去这部分处于建筑物中的距离后得到的可测量值记为Obstacle.distance
3. 障碍物的摆设方向:建模中以建筑物长边的面的朝向作为建模对象,
基准仍为上述坐标系,并规定以偏南面的长面为取值对象,记为Obstacle. toward,即-90°
4. 遮挡物的长、宽、高分别记为Obstacle..length、Obstacle.width、
Obstacle.height。
4.3 对太阳光线的建模(Sunlight)
本文中分析太阳光线是视阳光为平行直线,建模如下:
1.太阳光线的属性受时间和地理位置的影响,建模中时间分两项计,
即日期Sunlight .date和每日的太阳时Sunlight .time(具体见附录Date类和Time类的程序清单),由于本文分析是地理位置是随取光点而定的,故无需再为此建模
2.太阳赤纬角、太阳高度角、太阳方位角分别记为Sunlight.declination、Sunlight.h、Sunlight.s
5 本软件中设计的相关类的重要属性和方法说明:
5.1 Coordinate类(极坐标)
主要涉及极坐标的创建、运算和坐标系转换等
属性:angle 极角, r 极径
方法:Coordinate()、Coordinate(double a,double r) 创建方法
set(double a,double r) 用极坐标值更改记录
set(double a,double b,int i) 用点坐标值更改记录
getangle() 、 getr() 获取属性值
5.2 Date类(日期)
主要涉及日期的创建、运算
属性:year 年份、month 月份、day 日、 date 积日(即一年中的第几天)
方法:Date(int y,int m,int d) 一般创建方法
Date(int y,int date) 用年和积日的创建方法,只有年和积日两个属性可用
getdate()、getyear() 获取积日和年份属性值
5.3 Time类(时刻)
主要涉及时间的创建、运算等,为24小时制
属性:hour 时、minute 分、second 秒 time 小数计时间
方法:Time(int y,int m,int d) 一般创建方法
Time(float t) 用小数计时间的创建方法,只有hour和time两个属性可用
gettime()、gethour() 获取time和hour属性
toString() 产生时间字符串
5.4 Location类(地理位置)
主要涉及地理坐标的创建等
属性:latitude 纬度longitude 经度
方法:getlatitude()、getlongitude() 获取纬度值和经度值
5.5 House类(住房即采光点)
主要涉及采光点模型的创建等
属性:l 记录住房的地理位置为Location的对象
height 采光点高度 toward 采光方向,正南为0向西增加向东减少
方法:House(double latitude,double longitude,float h,double d) 创建方法
getlocation() 、getheight()、gettoward()获取属性值
5.6 Obstacle类(遮挡建筑物)
主要涉及遮挡建筑物的创建、运算等
属性:lenght,width ,height遮挡物的长宽高
direction 遮挡物相对采光点位角,正南为0,向西增加,向东减少
toward 遮挡物长面朝向,正南为0,向西增加,向东减少
house 作为参照物的采光点
A,B,C,D遮挡物4个角点的极坐标
s 遮挡建筑物与采光点的实际中心距离
方法:Obstacle(float lenght,float width,float height,double direction,double toward,float distance,House house) 创建方法
gethouse()、gets()、getdirection()、gettoward()、getlenght()、getwidth()、getheight()获取属性值
getminAngle() 求出做小极角角点
getma*Angle() 求出最大极角角点
getminr() 求出最小极径角点
onlyface() 判断是否是单面遮挡
getr(double angle) 求遮挡面上对应极角的点的极径
5.7 Sunlight类(日光)
主要涉及实现天阳数据的计算和阳光模型的创建等
属性:h 太阳高度角、 s 太阳方位角、 declination太阳赤纬
time 时刻、date 日期
方法:Sunlight(Location l,Date d,Time t)创建方法
gettime()、getdate()、geth()、gets()、getdeclination()获取属性值
5.8 Shadow类(日影)
主要涉及日影创建和单时刻日照分析等
属性:obstacle遮挡建筑物对象 cover遮挡与否的判断值
time 时间 date 日期
方法:Shadow(Date d,Time t,Obstacle o)创建方法
ifcover() 获取cover值true为无日照,false为有日照
5.9 DayShadow类(每日日照)
主要涉及对一天的日照统计等
属性:time1[]记录日照起始点、time2[] 记录日照结束点
alltime 统计当日总日照时长、n记录日照时间段数目
date 日期、obstacle遮挡物
方法:DayShadow(Date d,Obstacle o)创建方法
getalltime() 获取当日日照时长
toString() 生成描述字符串
5.10 YearShadow类(年日照)
主要涉及对一年的日照统计等
属性:year 年份、alltimeofyear 年内日照时长、n 本年天数
a,b,c,d记录春秋分,夏至日,大寒日,冬至日日照时长
obstacle遮挡建筑物信息
方法:YearShadow(int y,Obstacle o)创建方法
toString() 产生描述性字符串
6 对单时刻日照情况的分析
在本文的日照分析的基本方法是先判定单一时刻取光点的日照情况,而后加入时间参数,从而对建筑物的日照时间进行统计,很明显对但一时刻的日照情况的分析是本软件的核心步骤,以下将单一时刻日照分析的实现做详细分析。
6.1 太阳赤纬计算公式的实现:
按照上述太阳赤纬角的公式用JAVA语言可表述为(Sunlighe类中)
Double n=79.6764+0.2422*(d.getyear()-1985)-(int)((d.getyear()-1985) /4);
double T=d.getdate()-n;
double a=2*Math.PI*T/(365.2422);
declination=(0.3723+23.2567*Math.sin(a)+0.1149*Math.sin(2*a)-0.1712*Math.sin(3*a) -0.758*Math.cos(a)+0.3656*Math.cos(2*a)+0.0201*Math.cos(3*a))*Math.PI/(double)180;
其中declination即为原式中的太阳赤纬δ,a为原式中的θ,a为原式中的θ,n为原式中的N0,T为原式中的t ,d.getdate()为原式中的n。
到此重心转移到了积日d.getdate()的计算。积日得计算又涉及到平年和闰年得区分,按照规定能被400整除或能被4整除但不能被100整除的为闰年,否者为平年,闰年的2月有29天,平年的2月为28天,故d.getdate()的算法可如下进行(Date类中):
if(year%4==0&&year%100!=0||year%400==0){
switch (month){
case 1: date=day;break;
case 2: date=31+day;break;
case 3: date=31+29+day;break;
case 4: date=31+29+day+31;break;
case 5: date=31+29+day+31+30;break;
case 6: date=31+29+day+31+30+31;break;
case 7: date=31+29+day+31+30+31+30;break;
case 8: date=31+29+day+31+30+31+30+31;break;
case 9: date=31+29+day+31+30+31+30+31+31;break;
case 10: date=31+29+day+31+30+31+30+31+31+30;break;
case 11: date=31+29+day+31+30+31+30+31+31+30+31;break;
case 12: date=31+29+day+31+30+31+30+31+31+30+31+30;break;
}
} else{
switch (month){
case 1: date=day;break;
case 2: date=31+day;break;
case 3: date=31+28+day;break;
case 4: date=31+28+day+31;break;
case 5: date=31+28+day+31+30;break;
case 6: date=31+28+day+31+30+31;break;
case 8: date=31+28+day+31+30+31+30+31;break;
case 9: date=31+28+day+31+30+31+30+31+31;break;
case 10: date=31+28+day+31+30+31+30+31+31+30;break;
case 11: date=31+28+day+31+30+31+30+31+31+30+31;break;
case 12: date=31+28+day+31+30+31+30+31+31+30+31+30;break;
}
}
其中数据date即为原始公式中的n即积日,至此太阳赤纬的计算得以实现。
6.2 太阳高度角公式的实现:
按照太阳高度角的计算公式t=15°(n-12)和sinα=sin φ sin δ+cos φ cos δ cos t用程序可表达为(Sunlighe类中):
double ta=15*(t.gettime()-12)*Math.PI/(double)180;
double sinh=Math.sin (l.getlatitude())*Math.sin(declination)
+Math.cos (l.getlatitude())
* Math.co ……(未完,全文共42340字,当前仅显示7616字,请阅读下面提示信息。收藏《毕业论文:简易日照分析计算器的算法研究和软件实现》)