/************************************************************************/
/*线段与WGS84椭球求交
x^2/a^2+y^2/a^2+z^2/b^2=1
(x-x0)/m=(y-y0)/n=(z-z0)/p=t
m=x1-x0
n=y1-y0
p=z1-z0 p0线段起始点
p1线段终点
center椭球球心
a = osg::WGS_84_RADIUS_EQUATOR;//长轴
b = osg::WGS_84_RADIUS_POLAR;//短轴
/************************************************************************/
osg::Vec3d lineSegment_WGS84Ellipsoid_intersection(osg::Vec3d p0, osg::Vec3d p1,
osg::Vec3d center=osg::Vec3d(), double a = osg::WGS_84_RADIUS_EQUATOR, double b = osg::WGS_84_RADIUS_POLAR)
{
double x0 = p0.x(), y0 = p0.y(), z0 = p0.z();
double x1 = p1.x(), y1 = p1.y(), z1 = p1.z();
double cx = center.x(), cy = center.y(), cz = center.z();
double m = x1 - x0, n = y1 - y0, p = z1 - z0;
double A = (m*m + n*n) / (a*a) + p*p / (b*b);
double B = * ((m*(x0 - cx) + n*(y0 - cy)) / (a*a) + p*(z0 - cz) / (b*b));
double C = ((x0 - cx)*(x0 - cx) + (y0 - cy)*(y0 - cy)) / (a*a) + (z0 - cz)*(z0 - cz) / (b*b) - ;
double test = B*B - 4.0*A*C;
if (test >= 0.0)
{
double t0 = (-B - sqrt(test)) / (2.0 * A);
double t1 = (-B + sqrt(test)) / (2.0 * A);
osg::Vec3d lineNormal(m, n, p);
// 其实有两个解,根据你的需要选择t0还是t1。
osg::Vec3d hitp = lineNormal*t0 + p0;
return hitp;
}
return osg::Vec3d(, , );
}

最新文章

  1. 设置MYSQL允许用IP访问
  2. [转] 给ubuntu中的软件设置desktop快捷方式(以android studio为例)
  3. Leetcode: word search
  4. php之CI框架多语言的用法
  5. Bash基本语法
  6. SQL常用代码收集
  7. Spring配置文件解析--bean属性
  8. 冒泡排序小实例 php
  9. java和html的区别
  10. Yii2 多域名跨域同步登录退出
  11. codevs2492 上帝造题的七分钟 2
  12. python文件处理--笔记
  13. MIME协议
  14. FFmpeg深入分析之零-基础 <第一篇>
  15. c#中 HttpContext作用(一)【转】
  16. paip.数据库发邮件通知配置
  17. Everything中文绿色版在Win7/8/10用不了问题的图文教程,只显示盘符
  18. ES 6 : 函数的扩展
  19. iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
  20. Ubuntu安装mysql之后,编译找不到头文件

热门文章

  1. css 解决父div与子div不在同一容器的问题
  2. (转)小议TCP的MSS(最大分段)以及MTU
  3. Python装饰器、metaclass、abc模块学习笔记
  4. 使用Spring.NET的IoC容器
  5. UIStatusBarStyle PreferredStatusBarStyle does not work on iOS 7
  6. Java 利用POI操作PPT
  7. mysql4.5 更改密码,登录命令行闪退
  8. Android带进度条的文件上传,使用AsyncTask异步任务
  9. swift闭包的另一种用法
  10. 在selenium中使用css选择器进行元素定位