绘制恒线速度的参数曲线
2007-12-17 10:24
253 查看
假设一条参数曲线和某个参数t相关。
L:
x=f(t)
y=g(t)
Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1603144
L:
x=f(t)
y=g(t)
如果我们绘制这条参数曲线的时候的,t是按比例增加的话。可能点的分布会不均匀。 那么按照什么公式来决定t的步长能让曲线的点分布均匀呢? 首先我们对参数曲线公式进行微分。 dx=df(t) dy=dg(t) 那么ds=sqrt(dx*dx+dy*dy) 于是ds跟dt的关系便建立起来了。 ds=sqrt(f'(t)*f'(t)+g'(t)*g'(t))*dt.
代入t=0跟t=0时候的步长dt(0)可以得到t=0时候ds(0)。
根据需求。我们要保证以后每个dt(t)的值。ds(t)=ds(0) 因此。得到 dt(t)=ds(0)/sqrt(f'(t)*f'(t)+g'(t)*g'(t)) =dt(0)*sqrt(f'(0)*f'(0)+g'(0)*g'(0))/sqrt(f'(t)*f'(t)+g'(t)*g'(t))
这样既可以绘制出等步长的恒线速度的参数曲线
例子椭圆
代码:
boolDrawEclips(floata,floatb,HWNDhWnd,HDChdc)
{
RECTrect;
GetClientRect(hWnd,&rect);
intcx=rect.right/2;
intcy=rect.bottom/2;
#defineMYPI2(3.1415926f*2.0f)
floatdtheta0=9.0f/360.0*MYPI2;
floattheta=0.0;
floatrt=MYPI2/1.5;
for(;;)
{
floatdtheta=b*dtheta0/sqrt(a*a*sin(theta)*sin(theta)+b*b*cos(theta)*cos(theta));
floatx=a*cos(theta);
floaty=b*sin(theta);
intix=cos(rt)*x-sin(rt)*y;
intiy=sin(rt)*x+cos(rt)*y;
ix+=cx;
iy+=cy;
if(theta>=MYPI2)break;
SetPixel(hdc,(int)ix,(int)iy,RGB(255,0,255));
theta+=dtheta;
if(theta>MYPI2)theta=MYPI2;
}
return1;
}
Trackback:
相关文章推荐
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- OpenGL绘制简单的参数曲线(一)——三次Hermite曲线
- 怎样用几何画板绘制参数曲线
- python读取文本绘制动态速度曲线
- OpenGL绘制简单的参数曲线(二)——三次Bezier曲线
- 绘制参数曲线走势图的完整类
- OpenGL绘制简单的参数曲线(完)——三次B样条曲线
- 使用matplotlib绘制三维参数曲线
- canvas绘制曲线函数arc参数
- 用c#绘制曲线图
- win7 caffe使用笔记——绘制学习曲线