本人菜鸟在阅读代码是遇到问题,请高手帮忙看一下

飞梦之殇 2013-04-26 12:45:25
想请教一下关于ProjectPointOnPlane的意思是什么,如果是求与normal垂直的向量,是不是多除了一个inv_denom,忘高手帮忙解决一下
代码如下

typedef float vec_t;
typedef vec_t vec3_t[3];

vec_t VectorNormalize (vec3_t v)
{
float length, ilength;

length = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
length = sqrt (length); // FIXME

if (length)
{
ilength = 1/length;
v[0] *= ilength;
v[1] *= ilength;
v[2] *= ilength;
}

return length;

}

void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal )
{
float d;
vec3_t n;
float inv_denom;

inv_denom = 1.0F / DotProduct( normal, normal );

d = DotProduct( normal, p ) * inv_denom;

n[0] = normal[0] * inv_denom;
n[1] = normal[1] * inv_denom;
n[2] = normal[2] * inv_denom;

dst[0] = p[0] - d * n[0];
dst[1] = p[1] - d * n[1];
dst[2] = p[2] - d * n[2];
}

/*
** assumes "src" is normalized
*/
void PerpendicularVector( vec3_t dst, const vec3_t src )
{
int pos;
int i;
float minelem = 1.0F;
vec3_t tempvec;

/*
** find the smallest magnitude axially aligned vector
*/
for ( pos = 0, i = 0; i < 3; i++ )
{
if ( fabs( src[i] ) < minelem )
{
pos = i;
minelem = fabs( src[i] );
}
}
tempvec[0] = tempvec[1] = tempvec[2] = 0.0F;
tempvec[pos] = 1.0F;

/*
** project the point onto the plane defined by src
*/
ProjectPointOnPlane( dst, tempvec, src );//希望高手帮我解答一下

/*
** normalize the result
*/
VectorNormalize( dst );
}



...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
franzhong 2013-04-26
  • 打赏
  • 举报
回复
常如意 2013-04-26
  • 打赏
  • 举报
回复
飞梦之殇 2013-04-26
  • 打赏
  • 举报
回复
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
引用 5 楼 HUANGFEIDIAN 的回复: 这个你如果知道英文翻译自然就知道他的意思了,ProjectPointOnPlane的意思是当前点在某一平面上的投影点的坐标,如果要求这个的话,你得对于三维空间向量有足够的认识。事实上任何一本关于《计算机图形学》的课本都有相关的内容,楼主自己去找资料吧。我就点到为止了,懒得看代码。 http://blog.csdn.net/pizi0475
HUANGFEIDIAN 2013-04-26
  • 打赏
  • 举报
回复
引用 7 楼 HUANGFEIDIAN 的回复:
[quote=引用 6 楼 danti 的回复:] ....我其实知道英文意思,也知道他是向量,并且对微积分很了解,就是想知道他是不是求的与normal相垂直的向量
好吧,我自做多情了。 看了一下那个函数,是求向量p垂直于normal的分量,那就应该是33-35行多乘了那个ivr_denorma.[/quote] 打错字了,是inv_denom。
HUANGFEIDIAN 2013-04-26
  • 打赏
  • 举报
回复
引用 6 楼 danti 的回复:
....我其实知道英文意思,也知道他是向量,并且对微积分很了解,就是想知道他是不是求的与normal相垂直的向量
好吧,我自做多情了。 看了一下那个函数,是求向量p垂直于normal的分量,那就应该是33-35行多乘了那个ivr_denorma.
飞梦之殇 2013-04-26
  • 打赏
  • 举报
回复
....我其实知道英文意思,也知道他是向量,并且对微积分很了解,就是想知道他是不是求的与normal相垂直的向量
HUANGFEIDIAN 2013-04-26
  • 打赏
  • 举报
回复
这个你如果知道英文翻译自然就知道他的意思了,ProjectPointOnPlane的意思是当前点在某一平面上的投影点的坐标,如果要求这个的话,你得对于三维空间向量有足够的认识。事实上任何一本关于微积分的课本都有相关的内容,楼主自己去找资料吧。我就点到为止了,懒得看代码。
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
代码功能不是被人看出来的;而是被单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中分析出来的。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧