最新评论
@艾比莉
你好,请问这部分算法实现代码你有吗?我最近急着用由三维点进行三角剖分的代码,由于我不知道三维到二维Delaunay网格化、再到三维网格化的转换该如何编程实现,如果您有此部分代码可以发我一份吗(邮箱:208zwl@163.com)?不胜感激!(急求.....)
[quote]艾比莉:
亲爱的博主呀,帮帮我吧。
对三维离散点集进行二维平面上的Delaunay三角剖分,如何把三维点映射为二维点。我的理解是平行投影,用(x,y,z)中的(x,y)进行Delaunay三角剖分,然后加入每个三角形顶点的深度信息z,映射回三维空间。不知对不对,请教![/quote]
同求代码!请楼主赐教,谢谢!
static float diff = 0.0f; /*diffuse factor*/
static float visc = 0.0f; /*viscous factor*/
为什么这个初始化是0.0f呢?
我不太确定lz是不是真的理解万向节锁,不过看这篇文章的人想要理解万向节锁建议看一下13楼zeroyear的解释,这篇文章没有zeroyear那几句话解释的清楚,也不要拿向量来理解欧拉旋转,欧拉旋转定理是解释刚体旋转的,刚体不是向量。1楼沐枫的疑问是正确的,在指向天顶时,通过旋转底座依然可以跟踪飞行物,但有一点,万向节锁是在过渡帧动画时才会发生的,动画是连续的,当飞行物从天顶向南移动1度的时候,按人的理解,这时候望远镜应该是向南向下移动1度,但为了这个向南向下移动1度,望远镜必须先把底座转动90度,所以人实际看到的动画是飞行物在向南移动而望远镜却在指着天顶旋转底座,这不是看动画的人预期看到的,这就是万向节锁,即望远镜没能按照人的预期那样直接向南移动1度,而是拆分成了2次旋转,先转底座再向下转。
Re:关于万向节死锁(Gimbal Lock)(续) wl_99888 2010-12-04 16:21
请问博主例子图片用的什么作图工具画的啊?
谢谢!
Re:关于万向节死锁(Gimbal Lock)(续) songge09 2010-11-22 10:47
这个问题我总是搞不懂啊,iq太低了
Re:笔记:Bresenham画线算法的推导 cocat 2010-11-12 13:41
学习了~
我也想知道第一步的详细步骤啊,博主能不能给个链接?先谢谢啦
由于 gimbal lock 的存在,导致插值不对。这样来解释一下,
绘制望远镜:p' = p * Rx * Ry;
从(Rx:90, Ry:10)变化到(Rx:90, Ry:90), 这个时候如果希望能够捕捉向南的目标,即(Rx:180, Ry:<=90),那么必须在这里存在一个特出情况处理,即从Rx:90跳变到Rx:180。
所以用(pitch, yaw, roll)就要注意这样的特殊情况处理了。
亲爱的博主呀,帮帮我吧。
对三维离散点集进行二维平面上的Delaunay三角剖分,如何把三维点映射为二维点。我的理解是平行投影,用(x,y,z)中的(x,y)进行Delaunay三角剖分,然后加入每个三角形顶点的深度信息z,映射回三维空间。不知对不对,请教!
你好,问一下:
#define DECLARE_DYNAMIC(class_name) "
public: "
static const AFX_DATA CRuntimeClass class##class_name; "
中“static const AFX_DATA CRuntimeClass class##class_name;” 是什么意思?我测试了一下,报错说,预处理。
@hh0215
资料都是网上搜的,优化没时间搞现在。
Re:笔记:Bresenham画线算法的推导 SoRoMan 2010-05-28 10:28
@永远的北极星
同意你的观点。
Re:笔记:Bresenham画线算法的推导 SoRoMan 2010-05-28 10:22
@wakan
正解,已改正
楼主,您好,我刚接触这个内容,以后望您多多指教!~
您有这方面的详细资料以及优化的代码没?如方便,望您能抽出宝贵的时间给我发一份,邮箱:hfz2001@163.com,万分感谢!~
Re:译:关于万向节死锁(Gimbal Lock) Revive and Strive 2009-10-19 08:53
讨论,很好,学习学习
计算机技术交流群,是大家学习探讨好地方,可为你量身定做各类软件,提供语言学习辅导,希能为广大毕业设计的同学们提供帮助和指导,
客户服务QQ:389492427
邮箱:jsj-bs@163.com
Re:译:关于万向节死锁(Gimbal Lock) good boy 2009-08-12 00:16
难得,楼主还在关心这个问题。
偶然看到欧拉角,然后看到gimbal lock,就想了解下。
说下我的理解:
x
|
|<==--------------------<==飞机
| -
| -
|
|______________________y
o
假设x轴方向的变化可以通过万向节那样的圆环来控制,把望远镜上下旋转的旋转轴L对应成圆环的轴,飞机在东面时,L轴南北指向,当飞机飞到(x=90,90)时,望远镜的指向跟x轴一致;飞机向南飞时,望远镜若想继续跟踪飞机,就得绕东西方向的L轴旋转,但此时L轴仍然在南北方向上,导致Gimbal(平衡环)Lock,估计这是gimbal lock 这个名字的由来。所以无法继续跟踪飞机。
当然是可以通过旋转x轴90度,使L轴东西指向,望远镜可以继续跟踪飞机。
原因如上面所说,丢失一个自由度(完全确定一个物体在空间位置所需要的独立坐标的数目,叫做这个物体的自由度。我们是确定望远镜的指向,需要方位角和高度角,即两个自由度)。本来望远镜的指向是可以通过(x:方位角【0-360】,y:高度角【-90~90】)唯一确定的,而且x的变化时连续的,但是当望远镜指向90度时,望远镜的指向与方位角已经没有关系了,自由度只有一个就是高度角。之后x的变化不再连续,而是发生跳跃,像上面的x从90度变化到180度。
l楼主,有Delaunay三角剖分的源代码么?
请发给我一份,万分感谢!
xiaojunsusu@126.com
to XXDD:
欧拉角的连续旋转,意思是欧拉角坐标值的连续变化。比如:从(90,90)到(90,89.9...)或者到(89.9...,90)。
坐标值的表示是基于世界坐标系的(或者初始的物体坐标系),但物体的每次连续的旋转是基于当前的物体坐标系描述的。比如:绕x轴旋转1度后再绕y轴旋转1度,通常默认是指绕物体当前的物体x轴转1度,然后再按照转后的物体y轴转1度。
问题就出在连续的坐标值变化,如从(90,90)到(90,89.9...),有时候并不对应空间中连续的变换后物体的位置变化。
同意24楼的说法,其实LZ
大家的焦点都在于欧拉角的连续旋转.....
我的看法是欧拉角的连续旋转固然有,但是都是基于本地坐标系,非N-1次旋转后的新坐标系
LZ,请问欧拉角的连续旋转,何解?
是完成第N-1次旋转后的新坐标系,依据新坐标系而言?
还是相对老坐标系而言?
但是欧拉角确实对一个起始向量就是从0,0开始的,除非你设置他的起始向量
LZ的比喻不恰当,
在DX和OPNGL中,没有欧拉角连续变换一说,欧拉角3分量都是相对物体本地坐标系而言对X,Y,Z轴分别进行变换
re: 笔记:Bresenham画线算法的推导 wakan 2009-05-07 11:14
这里说说一个<<windows游戏编程大师技巧>>里面的一个Bresenham算法画线
他的DSub = - 2dx或2dy. 根据博主上面的推导 我试了试 你取的DSub = 2dy - 2dx或2dy 这两种画出来的线在肉眼上没有太大的区别
下面就是它的画线函数
int Draw_Line(int x0, int y0, // starting position
int x1, int y1, // ending position
UCHAR color, // color index
UCHAR *vb_start, int lpitch) // video buffer and memory pitch
{
// this function draws a line from xo,yo to x1,y1 using differential error
// terms (based on Bresenahams work)
int dx, // difference in x's
dy, // difference in y's
dx2, // dx,dy * 2
dy2,
x_inc, // amount in pixel space to move during drawing
y_inc, // amount in pixel space to move during drawing
error, // the discriminant i.e. error i.e. decision variable
index; // used for looping
// pre-compute first pixel address in video buffer
vb_start = vb_start + x0 + y0*lpitch;
// compute horizontal and vertical deltas
dx = x1-x0;
dy = y1-y0;
// test which direction the line is going in i.e. slope angle
if (dx>=0)
{
x_inc = 1;
} // end if line is moving right
else
{
x_inc = -1;
dx = -dx; // need absolute value
} // end else moving left
// test y component of slope
if (dy>=0)
{
y_inc = lpitch;
} // end if line is moving down
else
{
y_inc = -lpitch;
dy = -dy; // need absolute value
} // end else moving up
// compute (dx,dy) * 2
dx2 = dx << 1;
dy2 = dy << 1;
// now based on which delta is greater we can draw the line
if (dx > dy)//这里dx大于dy估计就是斜率小于1的情况
{
// initialize error term
error = dy2 - dx;
// draw the line
for (index=0; index <= dx; index++)
{
// set the pixel
*vb_start = color;
// test if error has overflowed
if (error >= 0)
{//但两种取值画出来效果差不多
error-=dx2;//就是这里按博主推导这里该为error+=dy2-dx2;
// move to next line
vb_start+=y_inc;
} // end if error overflowed
// adjust the error term
error+=dy2;
// move to the next pixel
vb_start+=x_inc;
} // end for
} // end if |slope| <= 1
else
{//根据上面的判断这里为斜率大于等于1的情况
// initialize error term
error = dx2 - dy;
// draw the line
for (index=0; index <= dy; index++)
{
// set the pixel
*vb_start = color;
// test if error overflowed
if (error >= 0)
{
error-=dy2;这里按博主推导这里该为error+=dx2-dy2;
// move to next line
vb_start+=x_inc;
} // end if error overflowed
// adjust the error term
error+=dx2;
// move to the next pixel
vb_start+=y_inc;
} // end for
} // end else |slope| > 1
// return success
return(1);
} // end Draw_Line
re: 笔记:Bresenham画线算法的推导 wakan 2009-05-07 10:15
"2.2.否则,下个点为B(x1+1,y1+1)"
这句话是不是有笔误,应该为 B(x1+1,y1)
re: 译:关于万向节死锁(Gimbal Lock) alexking 2009-03-20 15:49
学习!!!!~~
re: 笔记:Bresenham画线算法的推导 badwei 2009-03-20 01:32
仔细看了一下,优化看懂了
re: 笔记:Bresenham画线算法的推导 badwei 2009-03-20 00:58
PS:一般优化:
为避免小数转整数以及除法运算,由于Sub只是用来进行正负判断,所以可以令Sub = 2*dx*Sub = 2dy-dx,则
相应的DSub = 2dy - 2dx或2dy.
请问博主,这个优化的思路是怎样的,盼望早点能看到答案
亲爱滴楼主啊 我现在在做毕业设计,十分需要Delaunay三角剖分的这部分代码以及空圆检测这部分,麻烦楼主发给我一份吧~O(∩_∩)O谢谢啦
zzss619@163.com
re: 译:关于万向节死锁(Gimbal Lock) fatfatson 2009-01-24 23:25
楼主翻译的不错,只是没正面解答上面回复中“为什么不能旋转底座”的问题,我来帮忙解释一下哈。
当你搬出“底座”这个概念时,你已经在使用第三个参数了,而不是万向锁前提中要求的两个参数。这第三个参数就是镜身的“上向量”,也就是代码里构造view矩阵所要求的up vector,这个向量的关键作用就是为镜头(身)指明一个朝向,以便当镜头想从竖直状态往下偏时,应该选择(无数个方向)中的哪一个。
所以说让底座跟着转,其实就是在转这第三个参数。如果仅以前提中的两个参数来描述,就无法确定此方向。
不错 cuckoo321 2008-12-26 10:40
写的既浅显又透彻,赞一个
您好!我刚接触这个内容,很多不懂的地方,您有这方面详细资料和改进程序吗,谢谢!
wangjfnrc@163.com
re: 关于STL marbury 2008-12-19 00:26
你好,我有几个关于delaunay的问题想请教一下您,请问能否赐教?
QQ:67558853
您好,抱歉又就此问题打扰您.我刚刚接触到这个内容的学习,不懂的地方有好多好多,不知可否单独赐教?QQ:67558853
拜托了
re: 译:关于万向节死锁(Gimbal Lock) waitingfashion 2008-11-28 21:09
有人形容说看看自己家的电视机天线或收音机天线。
x,y的旋转模式是不同的。
假设,
x轴是天线自己的x轴(可变)
y轴永远是世界的y轴(固定)
当天线竖起来之后,就转不动了。
仔细想想还有那么点道理,可能物体local坐标与world坐标中的某个轴平行就会出现gimbal lock,还有经典形容说把自己头仰到最后,每个轴转一下试试就知道了,这个没怎么理解。。。。
最近在作关于人体关节的研究,得出来的数据是.bvh数据,全是人体各关节的自由度数据,搞得非常头疼。一会world坐标一会local坐标,从旋转角度数据看完全不知道关节是怎么旋转的,有没有高手了解这个的?
楼主有改进算法没,老师要搞啊!没办法!急!有就帮发下!
changdachenq@163.com
re: 笔记:Bresenham画线算法的推导 永远的北极星 2008-11-24 21:48
那所谓的两个点都可以用,就是说任选一个都可以,只要让线连贯即可。
re: 笔记:Bresenham画线算法的推导 永远的北极星 2008-11-24 21:39
思考1:如果Sub = 0时,会产生取两个点都可以的问题。这个问题还没深入。
-----------------------------------------------------------------
楼主,我认为没有Sub=0的可能,因为那里就是你图画里的蓝色区域,那里根本就不存在一个点,人的肉眼分辨是很差的,其实如果用显微镜看点阵屏的直线,那都是些很不直的不规则波浪线。
请楼主确认一下我讲的是否正确,谢谢分享!
博主,你好,你的文章对我很有用,谢谢你,我研究了你的代码,感觉判断点是否在三角形内的算法有些问题,不知道是不是我理解的不够,希望能得到你的回复
是不是说只要摄象机方向和上向量重合就会死锁???
我看见DirectX的文档里有view矩阵的解释:
//-------------------------------------------
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
//-----------------------------------------------------
我发现如果重合的话(Up和zaxis一样),xaxis是0向量。
re: 笔记:Bresenham画线算法的推导 lingang 2008-09-05 16:13
谢谢博主!!!这个对我的帮助很大!
re: 笔记:Bresenham画线算法的推导 SoRoMan 2008-09-02 22:02
@lingang
我更新了下图,上面说到了y1+0.5的由来,y1+1.5以此类推。
re: 笔记:Bresenham画线算法的推导 lingang 2008-08-31 22:07
谢谢博主的回复
那么我想问一下:
1.如果下下个点是下个点的右上邻接点,则
Sub2 = (-c-a(x1+2))/b - (y1+1.5) = -2a/b - 1.5
这里的(y1+1.5)是怎么得出来的?谢谢!
to xxxx: 对此例而言,欧拉角 (30, 90, -40) 和 (30, 90, 0) 坐标对应的位置并非一致,而是和(30-(-40),90,0)等同。
再说下连续的坐标值为什么有时候不能表示连续的空间位置:如图4。此时物体坐标为(30, 90, -40) ,如果再绕Xl旋转1度(注意此时的Xl和XW的不同),物体的蓝色中心轴偏离XW或者Zl轴1度。但是如果使用连续的坐标值,即(31, 90, -40)来表示新的位置 ,那么按照(31, 90, -40)旋转后的物体的蓝色中心轴还是在XW或者Zl轴上。
所以说有时候连续的空间位置不能用连续的坐标值来表示。