week15 Kmeans和MFC GDI入门

Qt和Qt Creator的区别
Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率。
Qt Creator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可以进行Qt开发,当然VS中的Qt是作为一个插件插入VS平台的。

K-means

K-means算法是集简单和经典于一身的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
目标:类内尽可能紧凑,类间尽可能分散

有2类二维空间点,A类和B类。
A 类点以(0, 0)为中心、(1, 0; 0, 1)为协方差矩阵的二维高斯分布;
B 类点以(1, 2) 为中心、(1, 0; 0, 2)为协方差矩阵的二维高斯分布;
随机生成300个A类点, 200个B类点, 并用K-Means进行分类

①生成数据,划分训练集、验证集
②随机取k个中心,本例为2
③对训练集中的点计算与中心的距离,分类
④一轮过后取每类数据点的中心作为新的中心
⑤迭代③、④,直到一轮迭代后的中心和上一轮相比没有变化
⑥数据可视化,在坐标纸上画出两类数据点和两个中心,输出迭代次数和质心坐标
⑦(可选)上述假设给定k为2,若k未知,可以采取k从1增大,观测两类点质心偏移距离的变化,如下两图,明显k从1到2变化幅度最大,而k>2后变化幅度变小,因此可以推测k值为2


实验结果

A类点曲线

B类点曲线

kmeans与KNN比对

GDI

什么是GDI?

Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素、在打印机上输出硬拷贝以及绘制Windows用户界面功能。在Visual C++6.0中的头文件C:/Program Files/Microsoft Visual Studio/VC98/Include/wingdi.h和Visual Studio 2005中的头文件C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include/WinGDI.h是访问gdi32.dll库文件的钥匙。

什么是DC?

设备环境DC(Device Context),也称为设备描述表或设备上下文。
Windows GDI:GDI DC
MFC设备描述表类:CDC CPaintDC CClientDC CWindowDC
设备环境保存了绘图操作中一些共同需要设置的信息,如当前的画笔、画刷、字体和位图等图形对象及属性,以及坐标映射、颜色和背景等影响图形输出的绘图模式。形象的说,一个设备环境提供了一张画布和一些绘画的工具,我们可以使用不同格式、颜色的绘画工具在上面涂鸦。这里,设备环境中的“设备”是指任何类型的显示器或打印机等输出设备,绘图时,我们不必关心所使用设备的编程的原理和方法,所有的绘制操作必须通过设备环境进行间接的处理,Windows会自动将设备环境所描述的结构映射到相应的物理设备上。

MFC中与GDI有关的类

为了支持GDI绘图,MFC提供了两种重要的类:
设备环境DC(Device Context)类,用于设置绘图属性和绘制图形
绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域
在MFC中,CDC是设备环境类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。CDC类封装了所有图形输出函数,包括矢量、光栅和文本输出。CDC的派生类包括CClientDC、CPaintDC、WindowDC、CMetaFileDC。


image.png

GDI绘图包括以下步骤:获取设备环境,设置坐标映射,创建绘图工具,调用DC绘图函数绘图。

画图调用哪些函数?
void CMFCGDIView::OnLButtonDown(UINT nFlags, CPoint point)
void CMFCGDIView::OnPaint()
可以通过paint直接作图,也可以通过鼠标左键按下来画图
dc.MoveTo(一个点) 画笔移动到一个点(为起始位置)
dc.LineTo(一个点) 画笔从起始点画直线到结束点
dc.Polyline(点数组,数组长度)将数组点按次序连接形成折线


画笔

polyline

image.png

sin

你可能感兴趣的:(week15 Kmeans和MFC GDI入门)