03年题目简要的摘录是这样的:
安装在汽车头部的车灯的形状为一旋转抛物面, 其开口半径36 毫米, 深度
2116 毫米, 行于地面关于y 轴对称地放置长度的均匀分布的线光源; 光屏离焦点的距离为
25000 毫米, 在屏上过A 点引出一条与地面相平行的直线, 在该直线A 点的同侧取B 点和
C 点, 使A C= 2A B = 216 米. 要求C 点的光强度不小于某一额定值(可取为1 个单位) ,B 点
的光强度不小于该额定值的两倍.
现在有一个要求,就是把线光源通过旋转抛物面的反射到光屏上的图像绘制出来.
我尝试了一下,主要思路是这样的:
1线光源分成若干成小段,将每小段在旋转抛物面上的所有对应投影点,求出其对应的光屏上的投影点.
2旋转抛物面是这样划分的,设旋转抛物面是以Z轴为对称轴,则将Z轴进行小段的划分,每个z[i],对应有
x^2+y^2=2p*z,再用一个循环,将2*pi划分成若干份,每个份取x=cos(fi)*sqr(2*p*z),y=sin(fi)*sqr(2*p*z),
再将旋转抛物面上的坐标通过坐标变换对应到光屏上即可,具体为程序为:(这里用VB实现)
For node1.x = -l / 2 To l / 2 Step 0.05
For node0.z = 0 To 21.6 Step 0.03
For fi = 0 To 2 * PI Step PI / 50
node0.x = Sqr(2 * p * node0.z) * Cos(fi)
node0.y = Sqr(2 * p * node0.z) * Sin(fi)
node2.x = node0.x * (-node1.x * node0.y + 30 * (15 + node0.z)) / (30 * (15 + node0.z))
node2.y = node1.x + 2 * node0.y * (450 - node1.x * node0.y + 30 * node0.z) / (900 + 60 * node0.z)
node2.z = -15 * (900 + 3 * node0.x * node0.x - 4 * node1.x * node0.y + 3 * node0.y * node0.y - 120 * node0.z) / (900 + 60 * node0.z)
k = (25015 - node0.z) / (node2.z - node0.z)
'the node to be drawed
node3.x = node0.x + (node2.x - node0.x) * k
node3.y = node0.y + (node2.y - node0.y) * k
Pic1.PSet (node3.y, node3.x), RGB(100, 100, 250)
Next fi
Next node0.z
Next node1.x
怎么样,还算清楚吧?
源码下载:
http://emilmatthew.51.net/downloads/drawLight2.rar