绘制恒线速度的参数曲线
2008-06-10 12:20
169 查看
假设一条参数曲线和某个参数 t 相关。
L:
x = f(t)
y = g(t)
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) )
这样既可以绘制出等步长的恒线速度的参数曲线
例子椭圆
代码:
bool DrawEclips(float a , float b , HWND hWnd , HDC hdc) { RECT rect ; GetClientRect(hWnd , &rect); int cx = rect.right/2; int cy = rect.bottom/2;
#define MYPI2 (3.1415926f*2.0f) float dtheta0 = 9.0f/360.0 * MYPI2; float theta = 0.0;
float rt = MYPI2 / 1.5; for(;;) { float dtheta = b * dtheta0 / sqrt( a *a * sin(theta) * sin(theta) + b * b * cos(theta) * cos(theta) ); float x = a * cos(theta); float y = b * sin(theta); int ix = cos(rt) *x - sin(rt)*y; int iy = 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; } return 1; }
相关文章推荐
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- 绘制恒线速度的参数曲线
- OpenGL绘制简单的参数曲线(一)——三次Hermite曲线
- 怎样用几何画板绘制参数曲线
- python读取文本绘制动态速度曲线
- OpenGL绘制简单的参数曲线(二)——三次Bezier曲线
- 绘制参数曲线走势图的完整类
- OpenGL绘制简单的参数曲线(完)——三次B样条曲线
- 使用matplotlib绘制三维参数曲线
- canvas绘制曲线函数arc参数
- 绘制loss和accuracy曲线
- 使用txt文档数据绘制matlab曲线