关于等值线的网格填充问题,请做过这方面的朋友帮帮忙

时间:2022-08-13 20:09:45
在计算出等值线网格并生成完等值线后要进行填充,但通过网格填充出来的效果很不好,有比较明显的锯齿边界,不知各位有什么好办法解决,望不吝赐教!

10 个解决方案

#1


你的问题太专业了吧,看过北航的计算机系做过一个三维建模的东西,挺厉害的,呵呵,估计他们不来这里

#2


锯齿边界要用图形反走样算法来实现,包括图元反走样和场景反走样。场景反走样opengl有相关函数,图元反走样可能要自己写一点算法。

填充指的什么?多边形填充?flood-fill算法没啥问题啊。

#3


我指的是通过插值根据散点数据生成等值线,同时还生成网格,然后将等值线画出,等值线画时需要进行填充颜色,也就是在两条等值线之间画上根据一个算法生成的不同颜色,现在我是根据网格的值判断某一网格填充什么颜色,是对一个一个的网格进行填充,所以产生锯齿边界,填充出的图特别难看,我想问问有什么其它的好方法解决这个问题。

#4


你可以用alpha混合的方法来消除锯齿啊,
不同颜色间如果超过一定阈值,就进行alpha混合啊。GDI和GDI+都有相应的函数来进行操作,
GDI+更方便,更容易控制。

#5


你考虑一下用等值线来造区,再填充区试试看

#6


asett1(asett1)你说的GDI函数是哪些,请详细说明一下

cloudrain(supxb)说的的方法实现起来很困难,我原来也考虑过这种方法,但没想出该怎么做,你有什么好的思路能说一下吗,谢谢

#7


給一个线性填充的例子,GDI+的
The following example uses a horizontal linear gradient brush to fill a line, an ellipse, and a rectangle:
LinearGradientBrush linGrBrush(
   Point(0, 10),
   Point(200, 10),
   Color(255, 255, 0, 0),   // opaque red
   Color(255, 0, 0, 255));  // opaque blue

Pen pen(&linGrBrush);

graphics.DrawLine(&pen, 0, 10, 200, 10);
graphics.FillEllipse(&linGrBrush, 0, 30, 200, 100);
graphics.FillRectangle(&linGrBrush, 0, 155, 500, 30);

#8


有GDI中的例子吗?我现在用的还是VC6,GDI+是.NET里面的吧,再次感谢!!!

#9


GDI+可以用在vc6里,我用了*年了 ^_^

#10


不好意思,我才刚开始做程序,还很多东西不懂,我的QQ号是17672270,asett1(asett1)你能加我吗?那样大家交流起来就方便一点。
我现在这个问题基本上解决了,我们领导的给的一个算法,多谢大家的帮忙!!!

#1


你的问题太专业了吧,看过北航的计算机系做过一个三维建模的东西,挺厉害的,呵呵,估计他们不来这里

#2


锯齿边界要用图形反走样算法来实现,包括图元反走样和场景反走样。场景反走样opengl有相关函数,图元反走样可能要自己写一点算法。

填充指的什么?多边形填充?flood-fill算法没啥问题啊。

#3


我指的是通过插值根据散点数据生成等值线,同时还生成网格,然后将等值线画出,等值线画时需要进行填充颜色,也就是在两条等值线之间画上根据一个算法生成的不同颜色,现在我是根据网格的值判断某一网格填充什么颜色,是对一个一个的网格进行填充,所以产生锯齿边界,填充出的图特别难看,我想问问有什么其它的好方法解决这个问题。

#4


你可以用alpha混合的方法来消除锯齿啊,
不同颜色间如果超过一定阈值,就进行alpha混合啊。GDI和GDI+都有相应的函数来进行操作,
GDI+更方便,更容易控制。

#5


你考虑一下用等值线来造区,再填充区试试看

#6


asett1(asett1)你说的GDI函数是哪些,请详细说明一下

cloudrain(supxb)说的的方法实现起来很困难,我原来也考虑过这种方法,但没想出该怎么做,你有什么好的思路能说一下吗,谢谢

#7


給一个线性填充的例子,GDI+的
The following example uses a horizontal linear gradient brush to fill a line, an ellipse, and a rectangle:
LinearGradientBrush linGrBrush(
   Point(0, 10),
   Point(200, 10),
   Color(255, 255, 0, 0),   // opaque red
   Color(255, 0, 0, 255));  // opaque blue

Pen pen(&linGrBrush);

graphics.DrawLine(&pen, 0, 10, 200, 10);
graphics.FillEllipse(&linGrBrush, 0, 30, 200, 100);
graphics.FillRectangle(&linGrBrush, 0, 155, 500, 30);

#8


有GDI中的例子吗?我现在用的还是VC6,GDI+是.NET里面的吧,再次感谢!!!

#9


GDI+可以用在vc6里,我用了*年了 ^_^

#10


不好意思,我才刚开始做程序,还很多东西不懂,我的QQ号是17672270,asett1(asett1)你能加我吗?那样大家交流起来就方便一点。
我现在这个问题基本上解决了,我们领导的给的一个算法,多谢大家的帮忙!!!