假设:
画布大小为sx, sy;
图像大小为bx, by;
画布边框为kx, ky;
求:
线数据d.n(值d.v.i)在画布上的点x,y
则
x(sx) = (d.n(sx - 2kx)/bx)+kx
y(sy) = (d.v.i(sy-2ky)/by)-ky
实现方法(winSDK):
假设:
画布大小为sx, sy;
图像大小为bx, by;
画布边框为kx, ky;
求:
线数据d.n(值d.v.i)在画布上的点x,y
则
x(sx) = (d.n(sx - 2kx)/bx)+kx
y(sy) = (d.v.i(sy-2ky)/by)-ky
实现方法(winSDK):
void DrawWave(HDC hdc, RECT rc, struct DATA *data)
{
int i;
int dmax,dmin;
int x,y;
int sx, sy;
int bx, by;
int kx, ky;
//图像实际大小
bx = data->number;
compMaxMin(data->val, bx, &dmax, &dmin); //求最大最小值
by = dmax - dmin;
if(!by) by = 1;
if(!(bx && by)) continue;
//边框大小
kx = ky = 2;
//画布大小
sx = rc.right - rc.left;
sy = rc.bottom - rc.top;
//绘制
y = sy - ((data->val[0] - dmin) * (sy - 2*ky) / by) - ky;
MoveToEx(hdc, kx, y, NULL); //第一点位置
for(i=1; i<data->number; i++)
{
x = (i * (sx - 2*kx) / bx) + kx;
y = sy - ((data->val[i] - dmin) * (sy - 2*ky) / by) - ky;
LineTo(hdc, x, y); //连接上一点到当前点
}
}