查看: 901|回复: 6

osg::Vec3f 如何返回一个 NULL 值

[复制链接]

该用户从未签到

发表于 2013-5-13 13:28:22 | 显示全部楼层 |阅读模式
下面代码是判断2D平面上两直线是否相交。但我写为 return null 时 vs2010 显示以下提示:
error C2664: 'osg::Vec3f::Vec3f(const osg::Vec3f &)' : cannot convert parameter 1 from 'int' to 'const osg::Vec3f &'

请问如果不用NULL 该如何表达返回一个空值?
  1. osg::Vec3f lineintersection(osg::Vec3f p1, osg::Vec3f p2, osg::Vec3f p3, osg::Vec3f p4)
  2. {
  3.         float x1 = p1.x(), x2 = p2.x(), x3 = p3.x(), x4 = p4.x();
  4.         float y1 = p1.y(), y2 = p2.y(), y3 = p3. y(), y4 = p4.y();

  5.         float d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
  6.         if(d==0) return NULL;/ // Error!
  7.         float pre = (x1*y2 - y1*x2), post = (x3*y4 - y3*x4);
  8.         float x = ( pre * (x3 - x4) - (x1 - x2) * post ) / d;
  9.         float y = ( pre * (y3 - y4) - (y1 - y2) * post ) / d;

  10.         return osg::Vec3f(x, y, 0.0f);
  11. }
复制代码

该用户从未签到

发表于 2013-5-13 13:33:28 | 显示全部楼层
osg::Vec3(0,0,0)  随便找一个值 都可以 只要知道它是无效的就可以了

该用户从未签到

 楼主| 发表于 2013-5-13 13:36:15 | 显示全部楼层
本帖最后由 vcy003 于 2013-5-13 13:37 编辑
liuzhiyu123 发表于 2013-5-13 13:33
osg::Vec3(0,0,0)  随便找一个值 都可以 只要知道它是无效的就可以了


谢谢你的回复。我目前是让z值返回一个不为零的值做辅助判断的,和你的方法差不多。
只是每次调用这个函数都要做一次判断感觉用起来不顺畅,又一直担心程序哪个地方调用时遗漏了。所以想着能不能有直接的表示方法。

该用户从未签到

发表于 2013-5-13 13:37:17 | 显示全部楼层
加一个bool 不就好了  函数参数引用

该用户从未签到

 楼主| 发表于 2013-5-13 13:38:14 | 显示全部楼层
liuzhiyu123 发表于 2013-5-13 13:37
加一个bool 不就好了  函数参数引用

嗯,这个方法要简洁一点,非常感谢。

该用户从未签到

发表于 2013-5-14 09:13:36 | 显示全部楼层
你这个的相交的原理是什么!之前我也是用的这个,没搞明白原理

该用户从未签到

发表于 2013-5-14 10:05:57 | 显示全部楼层
木子匕 发表于 2013-5-14 09:13
你这个的相交的原理是什么!之前我也是用的这个,没搞明白原理

平面上两条直线不平行就相交,  如果平行,那么两条直线与X轴或Y轴的夹角一定相等 即 (x4 - x3)/(y4-y3) = (x2-x1)/(y2-y1)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表