24小时热门版块排行榜    

查看: 269  |  回复: 4
当前主题已经存档。

kellylee0224

新虫 (初入文坛)

[交流] 【求助】求教球面反射程序

若已知球的球心坐标(x0,y0,z0),半径r0,及入射向量(xv,yv,zv),(加一个条件,向量是特指可以射入球内的,不用分情况讨论是否相切等等),如何求得反射向量?反射法则为:对入射向量分解,过入射点的切面内的分向量不变,垂直于切面的分向量方向反向。
希望有程序,多谢~~~

[ Last edited by kellylee0224 on 2009-4-17 at 13:46 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)


sunxiao(金币+1,VIP+0):谢谢参与,欢迎常来仿真编程版 4-19 10:04
列方程组用solve命令解啊
2楼2009-04-19 07:59:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kellylee0224

新虫 (初入文坛)

能否详细给出呢?
3楼2009-04-19 18:18:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fspdlh

金虫 (正式写手)

★ ★ ★
sunxiao(金币+3,VIP+0):谢谢参与,欢迎常来仿真编程版 4-20 05:52
x y z 为反射点,x1 y1 z1 为入射线上的一点,xu yu zu即为所求。
x y z 两解为入射线与球的两交点,xu yu zu 两解为xu yu zu本身和所求。
把x y z 代入xu yu zu 即为完整表达式。
function [x y z xu yu zu]=solveuv()
[x y z ]=solve(     '(x-x0)^2+(y-y0)^2+(z-z0)^2=r^2'    ,...
                    '(x1-x)/xv=(y1-y)/yv'               ,...
                    '(y1-y)/yv=(z1-z)/zv'               ,...
                    'x','y','z');
[xu yu zu ]=solve(  'xv^2+yv^2+zv^2=xu^2+yu^2+zu^2'     ,...
                    '(xv-xu)/(x-x0)=(yv-yu)/(y-y0)'     ,...
                    '(yv-yu)/(y-y0)=(zv-zu)/(z-z0)'     ,...
                    'xu','yu','zu');

>> [x y z xu yu zu]=solveuv

x =

(yv*x1-xv*y1+1/2*xv/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0+2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2)))/yv
(yv*x1-xv*y1+1/2*xv/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0-2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2)))/yv



y =

1/2/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0+2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2))
1/2/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0-2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2))



z =

(-zv*y1+1/2*zv/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0+2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2))+yv*z1)/yv
(-zv*y1+1/2*zv/(zv^2+xv^2+yv^2)*(-2*z1*yv*zv+2*y1*zv^2+2*zv*yv*z0+2*yv^2*y0+2*y1*xv^2-2*xv*x1*yv+2*xv*yv*x0-2*(-2*z1*yv^3*zv*y0+2*z1*yv^2*zv*xv*x1+2*y1*zv^2*yv^2*y0-2*z1*yv^2*zv*xv*x0+2*yv^2*y0*y1*xv^2-2*yv^3*y0*xv*x1+2*yv^3*y0*xv*x0-2*zv*yv^2*z0*xv*x1+2*zv*yv^2*z0*xv*x0+2*zv*yv^3*z0*y0-zv^2*yv^2*x1^2+2*zv^2*x0*yv^2*x1-zv^2*y0^2*yv^2+zv^2*r^2*yv^2-zv^2*x0^2*yv^2+2*yv^3*zv*y1*z1-2*yv^3*x0*xv*y1+2*xv^2*z0*yv^2*z1-xv^2*yv^2*z1^2-xv^2*y0^2*yv^2+xv^2*r^2*yv^2-xv^2*z0^2*yv^2-yv^2*zv^2*y1^2+2*yv^4*z0*z1+yv^4*r^2-yv^4*x0^2-yv^4*z0^2+2*yv^4*x0*x1-yv^2*xv^2*y1^2-2*yv^3*z0*zv*y1+2*yv^3*x1*xv*y1-yv^4*z1^2-yv^4*x1^2)^(1/2))+yv*z1)/yv



xu =

                                                                                                                                                                                                                xv
-(-xv*y^2+2*y*xv*y0+2*y*yv*x-2*y*yv*x0-xv*y0^2+2*yv*y0*x0-xv*z^2-2*y0*yv*x-2*xv*x*x0+xv*x^2-2*x*z0*zv+2*x*z*zv+2*xv*z*z0+xv*x0^2+2*zv*z0*x0-2*x0*z*zv-xv*z0^2)/(-2*z*z0+x0^2-2*x*x0-2*y*y0+x^2+z^2+z0^2+y^2+y0^2)



yu =

                                                                                                                                                                                                              yv
(2*xv*y*x0+z0^2*yv-2*xv*y0*x0+2*z*zv*y0+2*xv*y0*x-2*xv*y*x-2*yv*z*z0+yv*z^2+2*z0*zv*y-2*z*zv*y+yv*x^2-2*yv*x*x0+x0^2*yv-2*zv*z0*y0+2*yv*y*y0-yv*y^2-yv*y0^2)/(-2*z*z0+x0^2-2*x*x0-2*y*y0+x^2+z^2+z0^2+y^2+y0^2)



zu =

                                                                                                                                                                                                              zv
(zv*y^2-2*y*zv*y0-2*y*yv*z+2*y*yv*z0-2*z0*xv*x0+zv*x0^2+2*z*xv*x0+2*z0*xv*x-2*zv*x*x0-2*z*xv*x-z^2*zv+2*z*z0*zv+2*yv*z*y0-z0^2*zv+zv*y0^2+zv*x^2-2*z0*yv*y0)/(-2*z*z0+x0^2-2*x*x0-2*y*y0+x^2+z^2+z0^2+y^2+y0^2)


>>

[ Last edited by fspdlh on 2009-4-19 at 23:28 ]
4楼2009-04-19 23:24:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kellylee0224

新虫 (初入文坛)

非常感谢,会仔细研究~
5楼2009-04-24 16:00:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kellylee0224 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见