C++实现均匀照明的自由曲面设计
来源:互联网 发布:创维酷开内置软件卸载 编辑:程序博客网 时间:2024/05/16 14:39
当光线通过自由曲面时,可以实现一定距离处的照射物处于均匀照明状态,由于刚开始编辑,有很多粗糙的地方,欢迎讨论
公式没有给出,对于计算可以去网上找,本文给出了用c++实现的方法。
QQ:852063127
#include<iostream>#include<cmath>#include<iomanip>using namespace std;double const PI = acos(double(-1));int main(){ int N=800 ;//光通量划分成800份 int H=1000 ;//点光源距地面的高度 double n=1.49386 ;//折射int a=60;//发散角 double alpha = a* PI/180; double R = H*tan(alpha); double* cita = new double[N + 2]; double* r = new double[N + 2]; double temp; int t = 0; cita[1] = 0; r[1] = 0; for (int i = 1; i <= N + 1; i++) { r[i + 1] = sqrt(r[i] * r[i] + R*R / N); temp = sin(cita[i]); cita[i + 1] = asin(sqrt(temp*temp + 1.0 / N)); }double h = 20; double x;double Ix,Iy;double ox,oy;double nx,ny; for(int j = 1;j <=N + 1 ; j++) { x=h*tan(cita[j]); Ix=x/sqrt(x*x+h*h); Iy=h/sqrt(x*x+h*h); ox=(r[j]-x)/sqrt((r[j]-x)*(r[j]-x)+(H-h)*(H-h)); oy=(H-h)/sqrt((r[j]-x)*(r[j]-x)+(H-h)*(H-h)); nx=(ox-n*Ix)/sqrt(n*n-2*n*(Ix*ox+Iy*oy)+1); ny=(oy-n*Iy)/sqrt(n*n-2*n*(Ix*ox+Iy*oy)+1); cout<<scientific<<setprecision(7)<<x<<" "<<0<<" "<<h<<endl; h=h*((nx*tan(cita[j])+ny)/(nx*tan(cita[j+1])+ny)); }system("pause"); return 0;}
阅读全文
0 0
- C++实现均匀照明的自由曲面设计
- 均匀试验设计表格的问题
- 光源照明的设计原则及注意事项
- Matlab实现均匀量化的简单示例
- Matlab实现均匀量化的简单实例
- 均匀设计表的构造+考虑子目标偏好度的均匀设计
- 智能照明控制系统是如何实现的?
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
- 版式设计中如何做到均匀的版面
- [UVa11400]照明系统设计
- UVA11400照明系统设计
- Visual C+6.0实现文本串的自由拆分
- Visual C+6.0实现文本串的自由拆分
- Bezier曲线曲面的C++实现
- 非接触式的LED照明系统设计报告
- 均匀B样条的实现(2,3阶)
- 均匀B样条的实现(2,3阶)
- 实现一个均匀Tile的卷轴显示引擎
- ios中的导航栏渐变效果
- angular npm install问题
- Admin站点的使用(总结)
- 个人找到的阿里巴巴java编译手册
- hdu 5035 Delivery 概率
- C++实现均匀照明的自由曲面设计
- 【安全】Apache Tomcat CVE-2017-12617 put请求漏洞修复方案
- PowerPoint (PPT) 文档 文本内容提取
- job触发流程原理剖析与源码分析
- django依赖文件requirements.txt生成/安装
- VC操作XML的基本流程
- 【清明】排序
- 变量问题定义时的注意事项
- php计算两个时间之间的差