请教Bresenham画椭圆算法

rise139 2006-02-18 06:59:03
想得到快速绘制椭圆的算法 谢谢
...全文
886 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2006-04-06
  • 打赏
  • 举报
回复
快速画椭圆:

Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Sub Form_Click()
Ellipse Me.hdc, 0, 0, 0.9 * Me.Width / Screen.TwipsPerPixelX, 0.9 * Me.Height / Screen.TwipsPerPixelY
End Sub
笨狗先飞 2006-04-04
  • 打赏
  • 举报
回复
Circle画比较快
rise139 2006-02-22
  • 打赏
  • 举报
回复
我手里的书上都没看到过呀

rainstormmaster(暴风雨 v2.0)

好 这个是正圆 不是椭圆呀

yinweihong C++的 看不懂 :(
yinweihong 2006-02-22
  • 打赏
  • 举报
回复
http://www.robots.ox.ac.uk/~awf/graphics/bres-ellipse.html C++的在这里
rainstormmaster 2006-02-22
  • 打赏
  • 举报
回复
http://p102.ezboard.com/fvisualbasicexplorerfrm47.showMessage?topicID=4.topic
Free_Windy 2006-02-19
  • 打赏
  • 举报
回复
学习啊
zyl910 2006-02-18
  • 打赏
  • 举报
回复
去看《计算机图形学》
一般1.2章就是讲Bresenham画圆(1.1是Bresenham画线)


以前我也为这样问题难倒了很久
后来买本《计算机图形学》才发现别人早把这些问题研究透了
xinliangyu 2006-02-18
  • 打赏
  • 举报
回复
画成水平线成一定角度的椭圆才有些费劲!
rise139 2006-02-18
  • 打赏
  • 举报
回复
API以及类似算法我知道一些,但我想知道不使用浮点数的整数画椭圆方法. 谢谢
faysky2 2006-02-18
  • 打赏
  • 举报
回复
Circle方法画椭圆:

MSDN:

画椭圆


圆的方位比,决定了圆是显得很圆(圆)还是被拉长(椭圆)。Circle 方法的完整语法是:

[object.]Circle [Step](x, y), radius, [color], [start], [end] [, aspect]

start 参数和 end 参数是可选的;但是,如果想省掉参数,逗号是不能省的。例如:如果含有 radius 参数和 aspect 参数,省掉了 color、start、end 三个参数,则必须加上四个连续的逗号,它表明这三个参数被省掉了。

Circle (1000, 1000), 500, , , , 2

aspect 参数指定了水平长度和垂直长度比。该 aspect 参数是正浮点数,这说明它既可以是整数表达式,也可以是小数表达式,但不能是负数。该 aspect 参数较大时,椭圆沿垂直轴线拉长;相反,该 aspect 参数较小时,则沿水平轴线拉长。由于椭圆有两个半径—水平方向的 x 半径和垂直方向 y 半径— Visual Basic 在 Circle 语句中只使用了一个参数 radius 对应椭圆的长轴。如果 aspect 参数小于 1 的话,该 radius 半径指的是水平方向的 x 半径,如果 aspect 参数大于或等于 1 的话,则 radius 指的是垂直方向的 y 半径。

注意 aspect 参数指定的总是水平长度和垂直长度的实际物理距离比,要保证这一点(即便用的是自定义标尺),半径应以水平单位指定。

下列过程说明的是,不同的 aspect 参数值,Circle 方法是如何决定对 radius 参数的使用的;是将它作为椭圆的 x 半径,还是作为椭圆的 y 半径:

Private Sub Form_Click ()
'画一个实心椭圆。
FillStyle = 0
Circle (600, 1000), 800, , , , 3
'画一个空心椭圆。
FillStyle = 1
Circle (1800, 1000), 800, , , , 1 / 3
End Sub

课程解决的问题: 作为游戏行业或者图形学从业者,你是否面临以下问题: 到底openGL底层如何实现的? 到底矩阵操作变换是怎么做到的? 到底光栅化的算法以及原理是什么? 到底如何才能从3D世界投射到2D屏幕呢? 图形学有这么多的矩阵操作,到底如何推导如何应用呢? 学完这门课程,你应该就可以从底层了解一个初级的openGL图形接口如何实现,图形学最底层的封装到底面临哪些挑战;跟随我们一行一行写完代码,你就会得到一个迷你版本的openGL图形库,你可以深度体会图形从模型变换,观察矩阵变换,投影矩阵变换一直到光栅化纹理操作的全套模拟流程。 课程介绍: 本课程将带领学员不使用任何图形库,实现从0到1的图形学接口封装以及算法讲解,并且带领大家手敲代码,一行一行进行实现。 涵盖了(环境搭建,绘制点,Bresenham算法绘制完美直线,三角形拆分绘制算法,颜色插值算法,图片操作,图片二次插值放缩算法,纹理系统接口搭建及封装,矩阵操作理论以及实践,openGL类似接口封装,3D世界的图形学理论及接口封装等) 最终将带领大家通过C++实现一个3D世界的图形接口,方便所有人入门图形学,进行接下来的openGL接口以及GPU编程的学习   本课程为系列课程的第一步入门,且带领所有人进行实现,更加实用,可以让大家打牢图形学的基础知识及编程技能

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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