文档章节

三角形填充

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 367
阅读 15
收藏 0
 

给定三角形的三个顶点,填充三角形,想来想去,竟然找不到这样的软件工具。就连matlab都没有提供这样的绘图功能。我有一组三角形的顶点坐标,想判断这些三角形是否可以完全拼合在一起。如果一个一个地去检查每个三角形的顶点坐标,那真不是人干的活。求人不如求已,干脆自己写一个windows程序吧,利用gdi来填充三角形。

(1)读取三角形顶点坐标

三角形的顶点坐标是如此保存在一个txt文件中的:

248 224 242 223 247 221
253 221 245 218 229 218
219 218 253 221 229 218

。。。

每行格式为:x0 y0 x1 y1 x2 y2,核心代码为:

FILE* txtFile;
txtFile=fopen(fileName,"rt");
int i=0;
while(fscanf(txtFile,"%d %d %d %d %d %d\n",&x0,&y0,&x1,&y1,&x2,&y2)!=EOF)
{
   tris[i].x0 = x0;
   tris[i].y0 = y0;
   tris[i].x1 = x1;
   tris[i].y1 = y1;
   tris[i].x2 = x2;
   tris[i].y2 = y2;
   i++;
}

(2)填充三角形的函数

CClientDC dc(this);
CPoint p1(x0,y0), p2(x1,y1), p3(x2,y2);
CPoint points[]={p1,p2,p3,p1};

CRgn rgn;
   rgn.CreatePolygonRgn(points,3,ALTERNATE/*WINDING*/);//创建区域  
   CBrush brush;
   brush.CreateSolidBrush(rgb);//创建画刷
  
   dc.FillRgn(&rgn,&brush);//填充区域

   brush.DeleteObject();
   rgn.DeleteObject();

(3)绘制所有三角形

在OnDraw()函数中调用以下代码就可以绘制出所有的三角形了。

for(int i=0;i<trisCnt;i++)
{
   FillPoly3f(tris[i].x0, tris[i].y0,
    tris[i].x1, tris[i].y1,
    tris[i].x2, tris[i].y2, 0xFFFFFF);
}



© 著作权归作者所有

共有 人打赏支持
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
OpenGL超级宝典笔记——画三角形

学习了画线的知识,我们可以使用GLLINELOOP来画闭合的多边形。但是使用这种方式画出来的只有线框,多边形没有填充颜色。OpenGL支持绘制实心的多边形,并使用当前的颜色进行填充。 三角形 简单...

Mario_Q
2013/09/12
0
0
canvas核心技术-如何绘制图形

这篇学习和回顾canvas系列笔记的第二篇,完整笔记详见:canvas核心技术 通过上一篇canvas核心技术-如何绘制线段的学习,我们知道了如何去绘制线段。很多的线段的拼接就组成了图形了,比如常见...

snayan
07/18
0
0
p5.js作品集(2):彩旗

效果图.png 作品链接 https://codepen.io/SampleTape/full/baGbjE/ 主要方法 arc() triangle() translate() rotate() push() pop() 草图 草图.png 过程分解 初始化:新建一块画板 一、将坐标...

SampleTape
2017/12/12
0
0
[翻译]PyCairo指南--形状和填充

PyCairo中的形状和填充 PyCairo指南的这个部分,我们将创建一些基本的和更高级的形状。我们将使用单一颜色,patterns和渐变来填充他们。渐变将在另一章中讨论。 基本形状 PyCairo有一些基本的...

WolfCS
2013/05/21
0
0
Metal入门资料006-MetalKit第五部分

写在前面: 对Metal技术感兴趣的同学,可以关注我的专题:Metal专辑 也可以关注我个人的简书账号:张芳涛 所有的代码存储的Github地址是:Metal 正文 上次我们描述了(图形管道)和(Metal管道)...

张芳涛
06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
26分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
37分钟前
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
49分钟前
1
0
t-io给群组成员内置排序

1、实现比较器Comparator<ChannelContext> package xxx;import java.util.Comparator;import java.util.Objects;import java.util.Set;import java.util.TreeSet;import or......

talent-tan
53分钟前
2
0
px、em、rem 区别及作用

原文 起因: 一开始是为了解决页面放大时,字体不跟着放大的 bug。现在多用用于统一规范。 概念: 任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em...

lemos
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部