MFC 画正弦曲线

qewei87 2010-06-02 04:46:35
运用MFC基础类库画一条正弦曲线
...全文
701 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
airxiechao 2010-07-16
  • 打赏
  • 举报
回复
效果挺好的
na2650945 2010-07-16
  • 打赏
  • 举报
回复
加大for循环的次数。
还得用直线模拟曲线。
捕鲸叉 2010-07-16
  • 打赏
  • 举报
回复
用线段画是对的,没什么好笑。愿意的话画点,但映射模式一换,就可能有漏空
a1000004176 2010-07-15
  • 打赏
  • 举报
回复
哈哈~笑死我啦~正弦曲线就是用直线话达啊~哈哈
  • 打赏
  • 举报
回复
哈哈....楼上贴代码的,估计要倒下了..
magic7004 2010-07-14
  • 打赏
  • 举报
回复
楼主是牛人啊
blackboycpp 2010-07-14
  • 打赏
  • 举报
回复
楼主学过微积分不,
blackboycpp 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qewei87 的回复:]
你是用直线花的 不行 sorry分数不能给你!!!
[/Quote]
JoeBlackzqq 2010-07-14
  • 打赏
  • 举报
回复
看我的OnDraw函数实现:

void CSin3View::OnDraw(CDC* pDC)
{
CSin3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

CRect rc;
GetClientRect(&rc);

CPen *oldPen;
CPen newPen(PS_SOLID, 1, RGB(0,0,0));
oldPen = pDC->GetCurrentPen();
pDC->SelectObject(&newPen);
int clientWidth = rc.Width();
int clientHeight = rc.Height();

CPoint pCenter; // 坐标系原点
//pCenter.x = long(clientWidth * 0.4);
pCenter.x = 300;
pCenter.y = long(clientHeight / 2);

//画X轴
// pDC->MoveTo(pCenter.x / 4 - 40, pCenter.y);
// pDC->LineTo(clientWidth - pCenter.x / 4 + 40, pCenter.y);
pDC->MoveTo(50, pCenter.y);
pDC->LineTo(760, pCenter.y);

//画Y轴
pDC->MoveTo(pCenter.x, int(pCenter.y / 4));
pDC->LineTo(pCenter.x, int(pCenter.y * 1.6));


//画Sin(X)
const double pi = 3.14;
//int pstart = int(pCenter.x / 4); // 曲线第一个点横坐标
//int pend = int(clientWidth - pCenter.x / 4); // 曲线最后一个点横坐标
int pstart = 100; // 曲线第一个点横坐标
int pend = 700; // 曲线最后一个点横坐标

int y = int(pCenter.y - sin((pstart - pCenter.x) / 180. * pi) * 100); // 求第一点的纵坐标
pDC->MoveTo(pstart, y); // 鼠标移动到第一点处

for (int i = pstart + 1; i <= pend; i++) // 画接下来的点
{
y = int(pCenter.y - sin((i - pCenter.x) / 180. * pi) * 100); // 求每个点的纵坐标
pDC->LineTo(i, y);
}

pDC->SelectObject(oldPen);
}
qewei87 2010-06-02
  • 打赏
  • 举报
回复
你是用直线花的 不行 sorry分数不能给你!!!
qewei87 2010-06-02
  • 打赏
  • 举报
回复
不行啊!!
qewei87 2010-06-02
  • 打赏
  • 举报
回复
等下 我试试!!!
weixiaoshashou 2010-06-02
  • 打赏
  • 举报
回复
在view 里的OnDraw加点东西就可以了。
CRect rc;
GetClientRect(&rc);

CPen *oldPen;
CPen newPen(PS_SOLID,1,RGB(0,0,0));
oldPen = pDC->GetCurrentPen();
pDC->SelectObject(&newPen);
int clientWidth = rc.Width();
int clientHeight = rc.Height();

//画X轴
pDC->MoveTo(0,clientHeight/2);
pDC->LineTo(clientWidth,clientHeight/2);

//画Y轴
pDC->MoveTo(clientWidth/2,0);
pDC->LineTo(clientWidth/2,clientHeight);


//画Sin(X)
pDC->MoveTo(0,clientHeight/2);
for (int i = 0; i < clientWidth; i++)
{

pDC->LineTo(i,sin((double)i) * 10 + clientHeight/2);
}

pDC->SelectObject(oldPen);

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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