android 画正弦线 正弦怎么画图 您所在的位置:网站首页 安卓设置按钮位置怎么设置不了 android 画正弦线 正弦怎么画图

android 画正弦线 正弦怎么画图

2023-06-30 18:07| 来源: 网络整理| 查看: 265

一、引言

之前我就转载过一篇博文,内容大概就是如何利用win32 SDK函数绘制出正弦图像。其中绘制的思路大概是这样的,因为windows默认的设备坐标系统是客户区坐标,即按照客户区左上角为原点(0, 0),以x轴向右,y轴向下,来计算坐标位置的。这样与我们熟悉的数学坐标系不一致,导致了我们费了九牛二虎之力才将不同坐标系之间的坐标进行了转换。想了解这种方法绘制正弦图像的,可以点击这里Win API绘制y = sinx函数图像。

那么究竟可不可以在windows的窗口里,直接按照我们熟悉的数学坐标系,即原点居中,x轴向右,y轴向下来绘制我们的正弦图像呢?答案当然是可以的。

二、认识SetMapMode

Win32 SDK中有一个SetMapMode()函数,可以用来设置映射模式。那么什么叫做映射模式呢?

映射模式定义了页面空间单位到设备空间单位的转换,还定义了x轴和y轴的方向

也就是说,我们可以通过这个函数,来实现我们所思考着的(逻辑空间单位也就是虚拟坐标系)和实际我们看到的屏幕(设备空间单位也就是实实在在的设备显示)的坐标进行映射。比如我们想要把我们想象的虚拟坐标系的坐标原点与屏幕上的哪个点对应起来,就对应起来。

三、使用SetViewportOrgEx

使用这个函数,可以指定我们逻辑空间中的原点的位置与实际的窗口上的哪个点对应起来。

SetViewportOrgEx函数指定映射到窗口原点(0, 0)的设备原点的坐标。

四、开始写代码吧

这里将我写出来的代码粘贴如下,思路非常简单,看注释即可

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; static int cxClient, cyClient; switch (message) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); // 绘制辅助线 MoveToEx(hdc, 0, cyClient / 2, NULL); LineTo(hdc, cxClient, cyClient / 2); MoveToEx(hdc, cxClient / 2, 0, NULL); LineTo(hdc, cxClient / 2, cyClient); // 设置当前映射模式为 MM_LOMETRIC,即每个逻辑单位映射为0.1毫米,x轴向右,y轴向上 // 这样将窗口的映射模式类同于数学中的坐标系模式 SetMapMode(hdc, MM_LOMETRIC); // 指定映射到窗口原点(0, 0)的设备原点的坐标,即指定哪个设备原点将映射到逻辑原点(0, 0) // 这里是指定的窗口的最左侧居中的位置为我们的逻辑原点(0, 0)在实际的设备上的映射 // 这里指定的是窗口中心为坐标系原点位置,符合数学习惯 SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL); // 这里从最左边居中的位置开始绘制正弦图像 MoveToEx(hdc, -cxClient / 2, 0, NULL); for (double x = -cxClient / 2; x < cxClient / 2; x += 0.01) { // 这里的两个坐标都进行了一部分的放大,其中x += 0.01 是为了细分曲线 LineTo(hdc, x * 200, sin(x) * 300); } EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }五、总结

写出这个代码很简单,重点是要理解windows的以下几个概念: 1. 逻辑单位和设备单位 2. 逻辑坐标和设备坐标 3. windows的三种设备坐标系统 这三个概念就不写出答案了,有心的人自然可以查出来,理解才是关键。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有