CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

vc中画图???

楼主tondayong1981(bryan)2005-04-02 15:02:27 在 VC/MFC / 基础类 提问

我想画下面两个函数的图,但是不对,大家帮我改一下。  
   
  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)太小.看不到啊???  
  问题点数:20、回复次数:6Top

1 楼tondayong1981(bryan)回复于 2005-04-02 15:07:21 得分 0

对于有的函数即使我把x变大在除以一个数使x(-1,1)那函数的值怎么办呢??Top

2 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-04-02 15:49:44 得分 3

图形放大,将参数设小就可以  
  SetWindowExtEx(hdc,3,2,NULL);Top

3 楼Mackz(在相互)回复于 2005-04-03 17:12:02 得分 17

CPen   Pen(PS_INSIDEFRAME,   2,   RGB(0,   255,   0));  
  CPen   *pPenOld   =   pDC->SelectObject(&Pen);  
  double   A   =   87.56;  
  double   A1   =   1.0   /   A;  
  double   u   =   255;  
  CRect rcClient;  
  GetClientRect(rcClient);  
  double   xR   =   (double)rcClient.Width()   /   2.0;  
  double   yR   =   (double)rcClient.Height()   /   2.0;  
  int   xPos,   yPos;  
  double   x   =   -1.0,   y   =   -1.0;  
  xPos   =   (int)((x   +   1.0)   *   xR);  
  yPos   =   (int)((1.0   -   y)   *   yR);  
  pDC->MoveTo(xPos,   yPos);  
  for(x   =   -1.0;   x   <   1.0;   x   +=0.01)  
  {  
  if   ((abs(x)   >   0.0)   &&   (abs(x)   <   A1)   &&   (x   <   0.0))  
  y   =   -A   *   x   /   (1   +   log(A));  
  else   if   (abs(x)   >   0.0   &&   abs(x)   <   A1   &&   x   >   0.0)  
  y   =   A   *   x   /   (1   +   log(A));  
  else   if   (abs(x)   >   A1   &&   abs(x)   <   1.0   &&   x   >   0.0)  
  y   =(1   +   log(A   *   abs(x)))   /   (1   +   log(A));  
  else   if   (abs(x)   >   A1   &&   abs(x)   <   1.0   &&   x   <   0.0)  
  y   =   -(1   +   log(A   *   abs(x)))   /   (1   +   log(A));  
  xPos   =   (int)((x   +   1.0)   *   xR);  
  yPos   =   (int)((1.0   -   y)   *   yR);  
  pDC->LineTo(xPos,   yPos);  
  }  
  x   =   0.0;  
  y   =   0.0;  
  xPos   =   (int)((x   +   1.0)   *   xR);  
  yPos   =   (int)((1.0   -   y)   *   yR);  
  pDC->MoveTo(xPos,   yPos);  
  pDC->SelectObject(pPenOld);  
  Pen.DeleteObject();  
  Pen.CreatePen(PS_INSIDEFRAME,   2,   RGB(255,0,0));  
  pPenOld   =   pDC->SelectObject(&Pen);  
  for(x   =   0.0;   x   <   1.0;   x   +=0.01)  
  {  
  y   =   log(1   +   u   *   x)   /   log(1   +   u);  
  xPos   =   (int)((x   +   1.0)   *   xR);  
  yPos   =   (int)((1.0   -   y)   *   yR);  
  pDC->LineTo(xPos,   yPos);  
  }  
  pDC->SelectObject(pPenOld);  
  Pen.DeleteObject();  
  Top

4 楼Mackz(在相互)回复于 2005-04-03 17:13:04 得分 0

这是我试过的,拷贝到CView::OnDraw()里面就可以了。  
   
  为什么不用MFC?简单。Top

5 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-04-03 17:13:55 得分 0

LineTo中需要整数,可*100,如  
  LineTo(hdc,x*100,y*100);Top

6 楼Mackz(在相互)回复于 2005-04-03 17:53:11 得分 0

忘了件事,要用fabs(),不是abs()。Top

相关问题

  • VC中调用EXCEL画图JI
  • vc中如何在状态栏中画图标!
  • 如何在vc程序中用鼠标画图?急急急
  • 在VC中的C/C++ source code如何实现画图?
  • 在VC中的C/C++ source code如何实现画图程序?
  • 请教vc画图 问题
  • 如何在vc 所作的画图程序中改变亮度和对比度
  • vc画图时的小问题
  • 寻vc画图源代码(50分)
  • 请问几个VC画图函数!!!

关键词

  • null
  • wndclass
  • abs
  • ypos
  • xpos
  • ppenold
  • lpszclassname
  • usedefault
  • rcclient
  • lineto

得分解答快速导航

  • 帖主:tondayong1981
  • vcmute
  • Mackz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo