关于VC/MFC绘制正弦函数以及坐标显示的问题

xet869 2007-06-09 01:34:59
各位达人,我先把感谢的话说在前头,这是老师给的一道大作业,我已经焦头烂额了,如果有哪位高手帮小女子,万分感激啊~~~~~
编写一个单文档应用程序,程序运行后,在视图窗口中显示一条正弦曲线。当鼠标指向该曲线上的点时,在状态栏中显示点的坐标,否则显示“非线上点”的文本提示信息。
过程详细点最好不过了,因为偶是学数学的,计算机方面不开窍的,THX.
...全文
1343 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y___Y 2007-06-26
  • 打赏
  • 举报
回复
/////////////////////画曲线函数////////////////////////////
////////////////////直角坐标下的////////////////////////
//y=fun(x)
//p---绘图设备指针
//fun---函数指针
//StartP1---x的起始值
//StartP2---x的终止值
//PX---坐标原点x方向位置
//PY---坐标原点y方向位置
//Mx---x方向放大倍数
//My---y方向放大倍数
/////////////////////////////////////////////////////////
void DrawCurve(HDC hDC,double (*fun)(double),double StartP1,double EndP1,int PX,int PY,double Mx,double My)
{
int i,N=int(Mx*(EndP1-StartP1));
double x,y,dx;
dx=(EndP1-StartP1)/N;
x=StartP1;
y=(*fun)(x);
MoveToEx(hDC,PX+int(x*Mx),PY-int(y*My),NULL);
for(i=1;i<=N;i++)
{
x=StartP1+i*dx;
y=(*fun)(x);
LineTo(hDC,PX+int(x*Mx),PY-int(y*My));
}

}
////////////////////任意坐标下的////////////////////////
void DrawCurve(HDC hDC,double (*funX)(double),double (*funY)(double),double StartT,double EndT,int PX,int PY,double M)
{
int i,N=int(M*(EndT-StartT));
double t,x,y,dt;
dt=(EndT-StartT)/N;
t=StartT;
x=(*funX)(t);
y=(*funY)(t);
MoveToEx(hDC,PX+int(x*M),PY-int(y*M),NULL);
for(i=1;i<=N;i++)
{
t=StartT+i*dt;
x=(*funX)(t);
y=(*funY)(t);
LineTo(hDC,PX+int(x*M),PY-int(y*M));
}

}
bondyxie 2007-06-26
  • 打赏
  • 举报
回复
楼上所说的都不行,没有理解实质.
里边是要处理坐标映射的.
我所知道的就这些,因为我也尝试过做这个东西,可没有成功.
「已注销」 2007-06-10
  • 打赏
  • 举报
回复
这样做:
获取鼠标的X,Y坐标,然后把X坐标代入你的曲线,算出来一个Y,看这个Y跟你的鼠标当前Y是否相等,如果相等,就是在上面,否则不是
在BUTTONDOWN事件中处理
xet869 2007-06-09
  • 打赏
  • 举报
回复
我是VC++的作业呀,帅哥你让我用MATLAB,那我老师不郁闷死?
cpio 2007-06-09
  • 打赏
  • 举报
回复

用Matlab吧,似乎简单得多
xet869 2007-06-09
  • 打赏
  • 举报
回复
楼上的达人,能不能再详细点,3q
  • 打赏
  • 举报
回复
画线的用SetPixel就可以了,然后添加鼠标事件OnMouseMove(),用

CPoint curPoint;
GetCursorPos(&curPoint);

可以获取鼠标位置,判断该点是否在曲线上,如果在曲线上,则在状态栏显示:

CMainFrame * pFrame = (CMainFrame *) AfxGetApp()->m_pMainWnd;
CStatusBar * pStatus = (CStatusBar *) &pFrame->m_wndStatusBar;
str.Format ("坐标 X=%i, Y=%i", curPoint.x, curPoint.y);
pStatus->SetPaneText(1, str);
长尾巴的悟空 2007-06-09
  • 打赏
  • 举报
回复
GetsystemMetrics()

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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