八分法中点画圆

实现方法:从0°到45°开始画,其余部分进行求对称

1 、绘制X^2+Y^2=R^2的圆,将圆划分为⑧等份。我们从第二份开始绘制

分析:

最大位移方向是Y方向,因此令y每增加1,x不变或者减少1,我们可以令:

2 、构造判别式

分析:

将M(xi-0.5,yi+1)点代入圆的稳式方程F(x,y)=X^2+Y^2-R^2

所以d=F(M)=(xi-0.5)^2+(yi+1)^2-R^2

由图可以分析:

可知当d<0时如图所示,在圆内,所以选择Pd


当d>=0时,在圆外,所以选择Pu


3、求d的增量

分析:

当d<0时,取Pd

d1=F(M1)=(xi-0.5)^2+(yi+1)^2-R^2

d2=F(M2)=(xi-0.5)^2+(yi+2)^2-R^2

detad=d2-d1=2y+3


当d>=0时,取Pu

d1=F(M1)=(xi-0.5)^2+(yi+1)^2-R^2

d2=F(M2)=(xi-1.5)^2+(yi+2)^2-R^2

detad=d2-d1=2(yi-xi)+5


4、求d的初始值

分析:

d0=F(M0)=(R-0.5)^2+1-R^2=1.25-R


5、总结上述

分析:

d0=1.25-R

当d>=0时,取Pu:

detad=2(yi-xi)+5

x(i+1)=xi-1

y(i+1)=yi+1

当d<0时,取Pd:

detad=2y+3

x(i+1)=xi

y(i+1)=yi+1


6、matlab实现

主函数:(写的繁琐了,不过原理很简单)

clc;
clear all;
close all;
r=500;
X2=[];
Y2=[];
X1=[];
Y1=[];
d=1.25-r;
x=r;
y=0;
for i=1:r/sqrt(2)+1X2(i)=x;Y2(i)=y;if(d<0)d=d+2*y+3;x=x;y=y+1;elsed=d+2*(y-x)+5;x=x-1;y=y+1;end
end
for i=1:r/sqrt(2)+1X1(i)=xzuobiao(X2(i),Y2(i)); Y1(i)=yzuobiao(X2(i),Y2(i));
end
X3=X2;
Y3=-Y2;
X4=X1;
Y4=-Y1;
X5=-X1;
Y5=-Y1;
X6=-X2;
Y6=-Y2;
X7=-X2;
Y7=Y2;
X8=-X1;
Y8=Y1;
plot(X1,Y1);
hold on;
plot(X2,Y2);
hold on;
plot(X3,Y3);
hold on;
plot(X4,Y4);
hold on;
plot(X5,Y5);
hold on;
plot(X6,Y6);
hold on;
plot(X7,Y7);
hold on;
plot(X8,Y8);
title('R=500')

子函数:

第1区域的对称x点

function [XX]=xzuobiao(xx,yy)
syms Y X%先求垂足坐标
EQ1=(Y-yy)+(X-xx);%垂直
EQ2=X-Y;%在直线上
[XC YC]=solve(EQ1,EQ2);
XC2=double(XC);%垂足坐标
YC2=double(YC);
XX=2*XC2-xx;%利用中点公式求对称点
YY=2*YC2-yy;%利用中点公式求对称点

第1区域的对称y点

function [YY]=yzuobiao(xx,yy)
syms Y X%先求垂足坐标
EQ1=(Y-yy)+(X-xx);%垂直
EQ2=X-Y;%在直线上
[XC YC]=solve(EQ1,EQ2);
XC2=double(XC);%垂足坐标
YC2=double(YC);
XX=2*XC2-xx;%利用中点公式求对称点
YY=2*YC2-yy;%利用中点公式求对称点

7、算法效果

如有错误,欢迎指正!

计算机图形学——八分法中点画圆相关推荐

  1. 计算机图形学E3——OpenGL 中点画圆

    其他计算机图形学实验见 链接 #include<iostream> #include<GL/glut.h> using namespace std;float bx, by, ...

  2. matlab八分之一中点画圆算法,中点八分画圆算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define W 800 #define H 600 void drawCircle(SDL_Renderer* r ...

  3. c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

  4. 中点画圆算法----计算机图形学

    圆的对称特性: 一个八分圆上的点可以映射为其余七个八分圆的点 利用圆的对称性可以减少计算量,只需要计算出一个八分之一圆上需要画的点,就可以映射出整个圆 中点画圆算法: (对于原点为(xc,yc)的圆, ...

  5. 【计算机图形学】小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解

    小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解 引言 如何画圆 基本思想 中点画圆法 中点画圆基本思路 中点画圆改进 Bresenham画圆算法 Bre ...

  6. c语言计算机图形来画八分画圆,【计算机图形学】基本图形元素:圆的生成算法...

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  7. 计算机图形学在现实中的应用,计算机图形学在实际中的应用

    计算机图形学在实际中的应用 计算机图形学在实际中的应用 1963年,伊凡•苏泽兰在麻省理工学院发表了名为<画板>的博士论文,它标志着计算机图形学的正式诞生.至今已有四十多年的历史.此前的计 ...

  8. C语言——中点画圆算法和Bresenham画圆算法(easyx图形库)

    一.中点画圆法 首先是中点画圆法,考虑圆心在原点,半径为R的圆在第一象限内的八分之一圆弧,从点(0, R)到点(R/ , R/ )顺时针方向确定这段圆弧.假定某点Pi(xi, yi)已经是该圆弧上最接 ...

  9. 【计算机图形学】中点画圆算法和Bresenham画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

最新文章

  1. Spring内核研究-通过工厂注入
  2. centos修改mysql密码_WAMP下修改MYSQL数据库密码
  3. .NET Core 2.0 单元测试中初识 IOptionsMonitoramp;lt;Tamp;gt;
  4. 洛谷 P1115 最大子段和
  5. python队列及其实现
  6. linux接收数据并保存到环形缓冲区,自定义print函数缓存打印数据到环形缓冲区...
  7. 饮冰三年-人工智能-Python-16Python基础之迭代器、生成器、装饰器
  8. linux path_lookup,Linux虚拟文件系统(4)-- 路径名查找
  9. Spring循环依赖,竟然有这样不可思议的坑!
  10. 全球十大数据治理解决方案提供商
  11. MITRE Implementation of ISO 12233 Spatial Frequency Response (SFR)
  12. AntDesign 实战教程 --------前言
  13. 个人大学生工作室面试前期准备
  14. Python实现消息发送
  15. 变焦 焦距 等效焦距
  16. SAP 采购申请、采购订单的审批策略
  17. 减小PDF文档大小(转载)
  18. 红米手机H5布局压扁
  19. 使用 Terraform 部署 MWAA
  20. 佐佐吉牧:SEO算法变化与对策

热门文章

  1. linux自带截图工具使用
  2. selenium中键盘操作
  3. U盘装系统,免设置bios(非pe镜像启动)
  4. PPT中插入avi、mpg、flv、swf及rm、rmvb等视频文件的方法
  5. python批量下载图片
  6. 记-玩吧-一次失败的面试
  7. 【深度学习】实验5答案:滴滴出行-交通场景目标检测
  8. Android端+java后端+servlet+MySQL的型男塑造平台【前后端源代码+论文+答辩ppt】
  9. iptables 一些命令
  10. PHP开发环境配置:ThinkPHP与IDE