• 全部
  • 问答

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);



}
...全文
101 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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))));
问题是我想知道为什么这样修改顶点啊 ,怎么计算的呢?
能否解释下上面的程序呢,谢谢了
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-31 09:07
社区公告
暂无公告