- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
matlab语言-课程设计-- 几何作图
???????几何作图???????
MATLAB课程设计报告
题 目 几何作图
学 院 电气信息学院
专 业 电子信息科学与技术
学生姓名 田绍宏
学 号 2011052466 年级 11 级
教 师 郭江凌
二〇一三年七月十三日
设计名称:几何作图(1.1)
2、设计目标/设计要求(基本目标及扩展)
根据给定的API,编写MATLAB函数,实现多条线段作图。
function Y = ex03_drawline(I, x, y)
% 线段作图
% I : 输入画板矩阵, uint8
% x : 线段各端点的x坐标,行向量,其中(x1,x2)是第一条线段的,(x3,x4)是第二条的,如此类推
% y : 线段各端点的y坐标,行向量,其中(y1,y2)是第一条线段的,(y3,y4)是第二条的,如此类推
% Y : 输出画板矩阵, uint8
扩展1:根据给定的API,编写MATLAB函数,实现圆作图。
function Y = ex03_drawcircle(I, x, y, r)
% 圆作图
% I : 输入画板矩阵, uint8
% x : 圆心的x坐标,行向量
% y : 圆心的y坐标,行向量
% r : 圆的半径,行向量
% Y : 输出画板矩阵, uint8
扩展2:画虚线、点划线
设计方案
(1)、直线
设计方案:
根据给出的端点,计算所在直线方程
根据所得方程,计算出所在两端点间的(x,y)坐标对
I中以计算所得(x,y)坐标对为下标的元素置为v
(2)、圆
设计方案:
根据所给圆心、半径计算圆的方程
根据所得方程,计算圆上每个点的坐标对(x,y)
3、I中以(x,y)为坐标的点置为0
4、算法描述
(1)直线
根据给出的两端点算出直线斜率k=(y1-y2)/(x1-x2)。(x1x2)
得到直线方程为:Y-y1=k*(X-x1),即Y=k*(X-x1)+y1
经过变换得Y=a*X+b,其中a=(y1-y2)/(x1-x2),b=y1-a*x1
把x1到x2之间步长为1的xk分别带入直线方程中,计算出yk
在I矩阵中把每个计算出的(xk,yk)坐标对的数值置为0
(2)、圆
1、根据圆心坐标、半径得到圆方程:(x-x0)2+(y-y0)2=r2 既 (x00,y00,r0)
2、由圆心计算圆的边界,即x1=x0-r,x2=r+x0;y1=y2=y0
3、从x1开始到x2把中间步长为1的x带入方程中算得坐标对(x_k,+y_k)
4、在I矩阵中,把所有算出的(x_k,+y_k)坐标对的值置为0
算法实现及分析
(1)、直线
function Y = ex03_drawline(I, x, y)
%若斜率不存在,即为竖直的直线,则无需求斜率直接画
if (x(1) == x(2))
I(min(y):max(y),x(1))=0;
else
%1、根据给出的两端点算出直线斜率k=(y1-y2)/(x1-x2)。(x1x2)
a=(y(1)-y(2))/(x(1)-x(2));
b=y(1)-a*x(1);
%判断斜率的正负,选择以x或以y为基准
if (a==0)
I(y(1),min(x):max(x))=0;
else
if (a1 |a-1)
%2、得到直线方程为:Y-y1=k*(X-x1),即Y=k*(X-x1)+y1
经过变换得Y=a*X+b,其中a=(y1-y2)/(x1-x2),b=y1-a*x1
%3、把y1到y2之间步长为1的yk分别带入直线方程中,计算出xk
for y_k=min(y):max(y)
x_k=round((y_k-b)/a);
I(y_k,x_k)=0;
end
else
%2、得到直线方程为:Y-y1=k*(X-x1),即Y=k*(X-x1)+y1
经过变换得Y=a*X+b,其中a=(y1-y2)/(x1-x2),b=y1-a*x1
%3、把x1到x2之间步长为1的xk分别带入直线方程中,计算出yk
for x_k=min(x):max(x)
y_k=round(a*x_k+b);
原创力文档


文档评论(0)