GDI实现正切曲线

tiffinia 2008-03-31 09:07:39
求助,急 以下是用GDI绘制的正弦曲线,请高手帮助实现:正切曲线,区间是(-PI/2,PI/2),嘿嘿
#include <afxwin.h>
#include "Hello.h"
#include<math.h>
#define SEGMENTS 500
#define PI 3.1415926

CMyApp myApp;

/////////////////////////////////////////////////////////////////////////
// CMyApp member functions

BOOL CMyApp::InitInstance ()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow ();
return TRUE;
}

/////////////////////////////////////////////////////////////////////////
// CMainWindow message map and member functions

BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
ON_WM_PAINT ()
END_MESSAGE_MAP ()

CMainWindow::CMainWindow ()
{
Create (NULL, _T ("The Hello Application"));
}

void CMainWindow::OnPaint ()
{


CRect rect;
GetClientRect (&rect);
int nWidth=rect.Width ();
int nHeight=rect.Height ();


CPaintDC dc(this);
CPoint aPoint[SEGMENTS];

for (int i=0;i<SEGMENTS;i++){
aPoint[i].x=(i*nWidth)/SEGMENTS;
aPoint[i].y=(int)((nHeight/2)*
(1-(sin((2*PI*i)/SEGMENTS))));
}
dc.Polyline(aPoint,SEGMENTS);



}
...全文
183 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
这个简单啊,网上搜一下就得到答案了.
tiffinia 2008-04-08
  • 打赏
  • 举报
回复
谢谢你,很详细了
yangsh3002 2008-04-02
  • 打赏
  • 举报
回复
原图像(y轴向上,区间(0,pi/2)):x=i*nWidth/SEGMENTS,y=(nHeight/2)*tan(x*pi/2);
变换一(Y轴向上,区间(-pi/4,pi/4)):x=i*nWidth/SEGMENTS,Y=(nHeight/2)*tan(x*pi/2-pi/4);也就是将原图像向右平移pi/4;
变换二(Y轴向下,区间(-pi/4,pi/4)):x=i*nWidth/SEGMENTS,Y=(nHeight/2)*(1-tan(x*pi/2-pi/4));窗口的坐标系中Y轴是向下的,为了自己看得习惯,倒一下Y坐标。
tiffinia 2008-04-02
  • 打赏
  • 举报
回复
谢谢哦,能不能说的再具体一点啊
到底是怎么计算的,有关点的转换?
yangsh3002 2008-04-01
  • 打赏
  • 举报
回复
减pi/4是说对应于i=0时,x对应于-pi/4,y轴0点在最上面,越往下越大,用1减是说将y轴方向倒过来。
tiffinia 2008-03-31
  • 打赏
  • 举报
回复
以上错误了,应该是(-PI/4 PI/4)

结果是只需改为这样就可以了 aPoint[i].y=(int)((nHeight/2)*
(1-tan((PI/2*i)/SEGMENTS-(PI/4))));
问题是我想知道为什么这样修改顶点啊 ,怎么计算的呢?
能否解释下上面的程序呢,谢谢了

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧