vc中画图???
我想画下面两个函数的图,但是不对,大家帮我改一下。
l n(1+u|x|)
公式F(x)=sgn(x) ---------------
ln(1+u)
画图时采用μ=255。
对于下面公式
Ax
y=sgn(x)---------- 0<|x|<=1/A
1+lnA
1+ln( A|x|)
y=sgn(x)---------- 1/A<|x|<=1
1+lnA
A取87.56
Sgn(x)为x的极性,即x为+,sgn(x)为+
X为-,sgn(x)为-
X为-1~1的值
//μ_curve
#include<windows.h>
#include<math.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
double A=87.56;
double u=255;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreIntance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
char lpszClassName[]="曲线";
char lpszTitle[]="draw_A_curve";
//窗口类的定义
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=lpszClassName;
wndclass.lpszMenuName=NULL;
wndclass.style=0;
//-------以下进行窗口的注册-------------//
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return false;
}
//创建窗口
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
double x,y;
double i;
HPEN hPen;
PAINTSTRUCT ps;
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(hdc,300,300,NULL);
SetViewportExtEx(hdc,300,200,NULL);
SetViewportOrgEx(hdc,300,150,NULL);
hPen=CreatePen(PS_INSIDEFRAME,2,RGB(0,255,0));
SelectObject(hdc,hPen);
for(i=-1;i<1;i=i+0.01)
{
if(i==0)
MoveToEx(hdc,0,0,NULL);
else
{
x=x+0.01;
if(abs(x)>0 && abs(x)<1/A && x<0)
y=-A*x/(1+log(A));
else if(abs(x)>0 && abs(x)<1.0/A && x>0)
y=A*x/(1+log(A));
else if(abs(x)>1.0/A && abs(x)<1.0 && x>0)
y=(1+log(A*abs(x)))/(1+log(A));
else if(abs(x)>1.0/A && abs(x)<1.0 && x<0)
y=-(1+log(A*abs(x)))/(1+log(A));
LineTo(hdc,x,y);
//MoveToEx(hdc,x,y,NULL);
}
}
hPen=CreatePen(PS_INSIDEFRAME,2,RGB(255,0,0));
SelectObject(hdc,hPen);
for(i=0;i<1;i++)
{
if(i==0)
{
x=0;
y=0;
MoveToEx(hdc,x,y,NULL);
}
else
{
x=x+0.01;
y=log(1+u*x)/log(1+u);
LineTo(hdc,x,y);
//MoveToEx(hdc,x,y,NULL);
}
}
EndPaint(hwnd, &ps);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
哪儿错了,还有怎么把图形放大,因为比如y=sinx中的值(-1.1)太小.看不到啊???