MATLAB平面几何图形绘制实例

2023-05-16

 

                        MATLAB平面几何图形绘制实例

实例一、运动控制测试图形

%以下图形用于运动综合测试,平面图形包含直线、圆弧、整圆、锐拐角、钝拐角,能比较充分的测试各种轨迹 运动控制性能。

%输入圆心和半径可以调整图形大小和偏移,并打印出各运动坐标点,以适应不同机台调整与测试。

function Pos=TestFigure(Cx,Cy,R)

%图形计算
if nargin<3
   Cx=500;Cy=500;R=400;
end

sitaStep=0.0001;
fprintf('input:X = %d,Y = %d,R = %d\n', Cx,Cy,R);
L=sqrt(R^2-(R*cos(18*pi/180))^2)/sin(54*pi/180);%圆心到五角星内拐点的距离
P1.x=Cx+R*cos(18*pi/180);      P1.y=Cy+R*sin(18*pi/180);
P2.x=P1.x;                     P2.y=Cy+R;
P3.x=P2.x-2*R*cos(18*pi/180);  P3.y=P2.y;
P4.x=P3.x;                     P4.y=P1.y;
P5.x=Cx-L*cos(54*pi/180);      P5.y=Cy+L*sin(54*pi/180);
P6.x=Cx;                       P6.y=Cy+R;
P7.x=Cx+L*cos(54*pi/180);      P7.y=Cy+L*sin(54*pi/180);
P8.x=P1.x;                     P8.y=P1.y;
P9.x=Cx+L*cos(18*pi/180);      P9.y=Cy-L*sin(18*pi/180);
P10.x=Cx+R*cos(54*pi/180);     P10.y=Cy-R*sin(54*pi/180);
P11.x=Cx;                      P11.y=Cy-L;
P12.x=Cx-R*cos(54*pi/180);     P12.y=Cy-R*sin(54*pi/180);
P13.x=Cx-L*cos(18*pi/180);     P13.y=Cy-L*sin(18*pi/180);
P14.x=P4.x;                    P14.y=P4.y;
sita =(180-18)*pi/180:sitaStep:(2*pi+(180-18)*pi/180);%整圆
Arc_x = R*cos(sita)+Cx;%圆轨迹
Arc_y = R*sin(sita)+Cy;
sita =(180+72*2-54)*pi/180:sitaStep:(72*pi/180+(180+72*2-54)*pi/180);
C1.x=Cx-2*R*cos(36*pi/180)*cos(54*pi/180);%圆弧1的圆心
C1.y=Cy+2*R*cos(36*pi/180)*sin(54*pi/180);
Arc1x=  R*cos(sita)+C1.x;%弧轨迹
Arc1y=  R*sin(sita)+C1.y;
sita =(180+72-54)*pi/180:sitaStep:(72*pi/180+(180+72-54)*pi/180);
C2.x=Cx+2*R*cos(36*pi/180)*cos(54*pi/180);%圆弧2的圆心
C2.y=Cy+2*R*cos(36*pi/180)*sin(54*pi/180);
Arc2x=  R*cos(sita)+C2.x;
Arc2y=  R*sin(sita)+C2.y;
sita =(180-54)*pi/180:sitaStep:(72*pi/180+(180-54)*pi/180);
C3.x=Cx+2*R*cos(36*pi/180)*cos(18*pi/180);
C3.y=Cy-2*R*cos(36*pi/180)*sin(18*pi/180);
Arc3x=  R*cos(sita)+C3.x;
Arc3y=  R*sin(sita)+C3.y;
sita =(180-54-72)*pi/180:sitaStep:(72*pi/180+(180-54-72)*pi/180);
C4.x=Cx;
C4.y=Cy-2*R*cos(36*pi/180);
Arc4x=  R*cos(sita)+C4.x;
Arc4y=  R*sin(sita)+C4.y;
sita =(180-54-72*2)*pi/180:sitaStep:(72*pi/180+(180-54-72*2)*pi/180);
C5.x=Cx-2*R*cos(36*pi/180)*cos(18*pi/180);
C5.y=Cy-2*R*cos(36*pi/180)*sin(18*pi/180);
Arc5x=  R*cos(sita)+C5.x;
Arc5y=  R*sin(sita)+C5.y;
AxisX=[P1.x P2.x P3.x P4.x P5.x P6.x P7.x P8.x P9.x P10.x P11.x P12.x P13.x P14.x Arc_x Arc1x Arc2x Arc3x Arc4x Arc5x];
AxisY=[P1.y P2.y P3.y P4.y P5.y P6.y P7.y P8.y P9.y P10.y P11.y P12.y P13.y P14.y Arc_y Arc1y Arc2y Arc3y Arc4y Arc5y];

%返回值
Pos=[AxisX(1:14) AxisX(1) Cx C1.x C2.x C3.x C4.x C5.x;
   AxisY(1:14)  AxisY(1) Cy C1.y C2.y C3.y C4.y C5.y];

figure(1);
plot(AxisX,AxisY);
%text(Pos(1,1:14),Pos(2,1:14),{'P1','P2','P3','P4(14)','P5','P6','P7','P1(8,15)','P9','P10','P11','P12','P13','P4(14)'});
axis equal;
grid on;
hold on;

for n=1:21
    if n<16
       fprintf('Pos(%d):X= %f,Y = %f\n', n,Pos(1,n),Pos(2,n));
    elseif n==16
       fprintf('Center:X = %f,Y = %f\n',Pos(1,n),Pos(2,n));
    else
       fprintf('Arc(%d):X = %f,Y = %f\n',n-16,Pos(1,n),Pos(2,n));
    end
end
end

%程序默认图形:圆心(500,500),半径400

 

实例二、基本圆弧绘制

%圆弧轨迹在各种加工场合使用非常频繁,圆弧也是运动控制中最基本最常见的轨迹,以下给出标准圆弧以及三点圆弧的MATLAB平面算法,可用于进行圆弧设计以及验证。

function ArcCalculate1

ArcType=input('圆弧类型(1.标准圆弧(默认) 2.三点圆弧):','s');
if isempty(ArcType)
	ArcType=1;
else
    ArcType=str2num(ArcType);
end

CoorStr=input('起点坐标(X,Y),默认(0,0):','s');
if isempty(CoorStr)
	X_st=0;
    Y_st=0;
else
    Coordinate=str2num(CoorStr);
    X_st=Coordinate(1);
    Y_st=Coordinate(2);
end
if ArcType==1
    CoorStr=input('请输入圆弧插补圆心坐标(X,Y):','s');
    Coordinate=str2num(CoorStr);
    X_centre=Coordinate(1);
    Y_centre=Coordinate(2); 
else
    CoorStr=input('请输入圆弧插补中间点坐标(X,Y):','s');
    Coordinate=str2num(CoorStr);
    X_centre=Coordinate(1);
    Y_centre=Coordinate(2);    
end      
CoorStr=input('请输入圆弧插补终点坐标(X,Y):','s');
Coordinate=str2num(CoorStr);
X_ed=Coordinate(1);
Y_ed=Coordinate(2);
if ArcType==1
	Arc_dir=input('请输入圆弧方向(1.顺时针 2.逆时针默认:顺时针):');
	if isempty(Arc_dir)
        Arc_dir=1;
	end    
else
    %计算圆弧方向
    dir=(X_centre-X_st)*(Y_ed-Y_centre)-(Y_centre-Y_st)*(X_ed-X_centre);
    if dir>0
       Arc_dir=2;
    else
       Arc_dir=1;
    end
    %计算圆心坐标
    syms x y;
    m1x=(X_centre+X_st)/2;m1y=(Y_centre+Y_st)/2;
    m2x=(X_ed+X_centre)/2;m2y=(Y_ed+Y_centre)/2;
    abx=X_centre-X_st;aby=Y_centre-Y_st;
    bcx=X_ed-X_centre;bcy=Y_ed-Y_centre;
    f1=sym((x-m1x)*abx+(y-m1y)*aby);
    f2=sym((x-m2x)*bcx+(y-m2y)*bcy);
    sol=solve(f1,f2);
    X_centre=eval(sol.x);
    Y_centre=eval(sol.y);
end
    R=sqrt((X_centre-X_st)^2+(Y_centre-Y_st)^2);
	%计算起始角
    ThetaStep=1/R/50;
    if(X_st==X_centre)
        if((Y_centre-Y_st)>0)
            Angle_st=3*pi/2;
        elseif(Y_centre-Y_st)<0
            Angle_st=pi/2;      
        end
    end
    if(X_st-X_centre)>0 && (Y_st-Y_centre)>=0
        Angle_st=atan((Y_st-Y_centre)/(X_st-X_centre));
    elseif(X_st-X_centre)<0 && (Y_st-Y_centre)>=0
        Angle_st=pi+atan((Y_st-Y_centre)/(X_st-X_centre));
    elseif(X_st-X_centre)<0 && (Y_st-Y_centre)<=0
        Angle_st=pi+atan((Y_st-Y_centre)/(X_st-X_centre));
    elseif(X_st-X_centre)>0 && (Y_st-Y_centre)<=0
        Angle_st=2*pi+atan((Y_st-Y_centre)/(X_st-X_centre));
    end 

    %计算终止角
    if(X_centre==X_ed)
        if(Y_ed-Y_centre>0)
            Angle_ed=pi/2;
        elseif(Y_ed-Y_centre<0)
            Angle_ed=3*pi/2;
        end
    end

    if(X_ed-X_centre)>0 && (Y_ed-Y_centre)>=0
        Angle_ed=atan((Y_ed-Y_centre)/(X_ed-X_centre));
    elseif(X_ed-X_centre)<0 && (Y_ed-Y_centre)>=0
        Angle_ed=pi+atan((Y_ed-Y_centre)/(X_ed-X_centre));
    elseif(X_ed-X_centre)<0 && (Y_ed-Y_centre)<=0
        Angle_ed=pi+atan((Y_ed-Y_centre)/(X_ed-X_centre));
    elseif(X_ed-X_centre)>0 && (Y_ed-Y_centre)<=0
        Angle_ed=2*pi+atan((Y_ed-Y_centre)/(X_ed-X_centre));
    end 

    if(Arc_dir==1)
        if(Angle_st-Angle_ed)>0
            sita = Angle_ed:ThetaStep:Angle_st;
        elseif(Angle_st-Angle_ed)<0
            sita = [0:ThetaStep:Angle_st Angle_ed:ThetaStep:2*pi];
        else
            sita = 0:ThetaStep:2*pi;%起始角等于终止角,则画一个整圆
        end
   elseif(Arc_dir==2)
       if(Angle_st-Angle_ed)>0
            sita = [0:ThetaStep:Angle_ed Angle_st:ThetaStep:2*pi];
       elseif(Angle_st-Angle_ed)<0
            sita = Angle_st:ThetaStep:Angle_ed;
       else
            sita = 0:ThetaStep:2*pi;
       end
    end
    Arc_x =R*cos(sita)+X_centre;
    Arc_y =R*sin(sita)+Y_centre;
    figure(3);
    plot(Arc_x,Arc_y,'m');
    legend('理论圆弧曲线');%自适应显示线型标注
    grid on;
    axis equal;
end

%圆弧起点(0,0),圆心(200,0),终点(400,0),顺时针方向


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB平面几何图形绘制实例 的相关文章

  • VUE3中运用axios处理后端数据

    xff08 1 xff09 在src下新建一个http文件夹 xff0c 文件夹下新建一个index js xff08 2 xff09 在index js文件中引入axios xff08 3 xff09 在index js里面写axios实
  • leveldb性能调优

    许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎 xff0c 例如tair xff0c hbase xff0c canssandra xff0c 因此理解并调优存储引擎可以大大的提高系统的性能 前一篇大致介绍了原
  • Android 重启 不开机 Backtrace 分析

    此文摘自 mtk online Android 在发生crash 时可以通过 backtrace 定位发生的的位置 xff0c 方便进一步来 fix issue 1 Java Backtrace 从Java Backtrace 我们可以知道
  • SQL Server 2016 OPENJSON忽略大小写

    使用WITH子句OPENJSON将输入JSON表达式中的键与该WITH子句中的列名进行匹配 xff0c 是区分大小写 xff0c 可以使用条件聚合以忽略大小写 xff1a DECLARE 64 JSON varchar max 61 39
  • 论文解读:自适应参数控制方案介绍——Effect Assessment

    Adaptive Probabilities of Crossover and Mutation in Genetic Algorithms TCYB 1994 动机自适应 p c p c
  • SHELL自动化运维

    第1章 shell脚本 1 1 shell 简介 shell 的定义 xff1a span class token number 1 span 在计算机科学中 xff0c Shell就是一个命令解释器 span class token nu
  • iOS tableView cell高度自适应 两种方法

    最近在开发遇到cell高度不确定的情况 xff0c 主要原因是cell里面的label的高度是不确定 从而导致cell高度不确定 我找到了两种解决方案 第一种 利用iOS8的新特性 xff0c 自动计算cell的高度 第二种 自己计算每个c
  • Mysql:is not allowed to connect to this MySQL server

    Mysql is not allowed to connect to this MySQL server 如果你想连接你的mysql的时候发生这个错误 xff1a ERROR 1130 Host 39 192 168 1 3 39 is n
  • 编程题#5:细菌实验分组 C语言

    先求出繁殖率放到value 100 里 然后用bubble int arraynum int arrayvalue int nn 冒泡排序算法对繁殖率value和培养皿编号num从大到小排序 记录繁殖率高的培养皿个数bignum 从大到小输
  • 【Mysql基础】使用limit限制结果集的位置和大小

    使用下面的语句来限制结果的大小和位置 xff1a SELECT FROM table LIMIT offset rows rows OFFSET offset LIMIT 子句 指定SELECT 语句返回指定的记录数 LIMIT 接受一个或
  • 拓扑排序的实现

    拓扑排序的定义 xff1a 实现思路 xff1a 首先设置一个队列专门存储入度为0的点 xff0c 同时用vector建立邻接链表 xff1b 将邻接链表建立完成之后 xff0c 首先选取入度为0的点加入队列中 xff1b 当队列不为空时
  • 非阻塞/异步(epoll) openssl

    前段时间在自己的异步网络框架handy中添加openssl的支持 xff0c 当时在网络上搜索了半天也没有找到很好的例子 xff0c 后来自己慢慢的摸索 xff0c 耗费不少时间 xff0c 终于搞定 因此把相关的资料整理一下 xff0c
  • Centos7离线rpm安装MySQL-5.7.29【推荐】

    Centos7离线rpm安装MySQL 5 7 29 一 彻底卸载系统原装的MySQL 1 查找mysql进程 如果查到的结果不为空 xff0c 则进入第2步卸载mysql rpm qa grep i mysql 2 卸载mysql 停止m
  • 使用Flask-Script支持命令行选项

    Flask 的开发 Web 服务器支持很多启动设置选项 xff0c 但只能在脚本中作为参数传给 app run 函数 这种方式并不十分方便 xff0c 传递设置选项的理想方式是使用命令行参数 Flask Script 是一个 Flask 扩
  • 自定义alert,并添加回调函数

    需求 xff1a 一些自定义的alert只是简单的页面效果 xff0c 不能做到中断js xff0c 有了回调函数后 xff0c 自定义的弹出窗点击之后 xff0c 就能执行回调函数了 在一些登录场景很有用 xff0c 登陆失败后 xff0
  • 解决了设置了Access-Control-Allow-Origin: *还是跨域的问题。

    说起跨域请求 大家首先想到的就会是设置请求头Access Control Allow Origin 但是有时候只设置这么一样还是解决不了的跨域问题就要分的比较细的设置请求头了 xff1a access control allow heade
  • flex布局

    flex布局 一 布局 块级元素flex布局 span class token property display span span class token punctuation span flex span class token pu
  • Docker 容器启动 mysql -V 挂载数据目录 备份数据

    请大神们多多指点评论 xff0c 不胜感激 1 通过 docker 下载 mysql 8 0 1 镜像 2 创建文件备份目录 mkdir p home mysql conf logs data mysql 3 my cnf 文件 大概是这样
  • Debian6原因Debian官方删掉了8以下的文件,只能连阿里云的源

    参考https lowvps cn debian 8 apt source 404 201904 qiang外服务器 xff0c 能连上阿里云的源 xff0c 官方的源连不上了 404 修改 etc apt source list文件为 x
  • qt/qtcreator在Arm架构下的安装

    环境 xff1a 银河麒麟系统 xff0c linux arm架构 1 安装zlib zlib下载地址 xff1a http www zlib net 解压后 xff0c 看里面README文件 xff0c 编译安装分为几步骤 xff1a

随机推荐

  • sqlite bolb数据的写入和存储

    1 什么是BLOB数据 BLOB binary large object 即二进制大对象 xff0c 是一种可以存储二进制文件的容器 在计算机中 xff0c BLOB常常是数据库中用来存储二进制文件的字段类型 常见的BLOB文件有图片 声音
  • 计算机视觉基础大纲

    计算机视觉思维导图大纲 1 GPU的概念 什么是GPU呢 xff1f 首先说一下什么是GPU xff0c GPU Graphics Processing Unit 即图形处理器 xff0c 又称显示核心 xff0c 也就是显卡的核心 xff
  • kqueue示例

    网络服务器通常都使用epoll进行异步IO处理 xff0c 而开发者通常使用mac xff0c 为了方便开发 xff0c 我把自己的handy库移植到了mac平台上 移植过程中 xff0c 网上居然没有搜到kqueue的使用例子 xff0c
  • AI写代码 GitHub Copilot + Idea 安装和使用教程

    文章目录 一 GitHub Copilot订阅服务二 Idea安装Copilot插件三 插件使用四 参考文档 GitHub Copilot 是微软与OpenAI共同推出的一款AI编程工具 xff0c 基于GitHub及其他网站的源代码 xf
  • 5GC 网元AMF、SMF、AUSF、UPF、PCF、UDM、NRF、NSSF、NEF介绍

    AMF Access and Mobility Management Function xff0c 接入和移动性管理功能 xff0c 执行注册 连接 可达性 移动性管理 为UE和SMF提供会话管理消息传输通道 xff0c 为用户接入时提供认
  • windows 下wsl 启动不了

    win10 升级到了dev 版本 xff0c 安装了16 10 0版本的visual studio 2019 后 xff0c 重启启动 xff0c 发现wsl 启动不了了 xff0c docker desktop 不能用了 尝试了下面的一波
  • 算法---判断101-200之间有多少个素数,并输出所有素数。

    算法 判断101 200之间有多少个素数 xff0c 并输出所有素数 题目 xff1a 判断101 200之间有多少个素数 xff0c 并输出所有素数 程序分析 首先明白什么是素数 xff0c 只能被1和本身整除的数 xff0c 用循环遍历
  • Tesseract-OCR 字符识别---样本训练

    转自 xff1a http blog csdn net feihu521a article details 8433077 Tesseract是一个开源的OCR xff08 Optical Character Recognition xff
  • centos fluxbox 安装,个性化配置

    centos fluxbox 安装 个性化配置 张映 发表于 2010 12 01 分类目录 xff1a linux 我用的第一个linux系统是archlinux xff0c 当时装的桌面是fluxbox xff0c 界面简单 xff0c
  • 算数移位(<<, >>)与逻辑移位

    lt lt gt gt 是算数移位 xff0c 也就是 1 xff0c 如果右移 xff0c 则 最高位补1 左移 xff0c 则右边补0 但是uint32 t的10 00 00 00 右边移动后 xff0c 是什么 xff1f 补0呗 x
  • OCR数据集

    1 SynthText in the Wild dataset 数据集下载链接 xff1a http www robots ox ac uk vgg data scenetext 数据集介绍 xff1a 一个综合生成的数据集 xff0c 其
  • Linux(centos)下搭建confluence

    1 下载文件 2 将下载的文件放到 opt路径下 通过上图可以看出confluence安装到了 opt atlassian confluence和 var atlassian application data confluence目录下 x
  • gitlab中文社区

    1 获取gitlab中文社区项目 中文社区版项目 xff1a https gitlab com xhang gitlab 2 克隆中文仓库 git clone https gitlab com xhang gitlab git 3 查看gi
  • 阿里云 oss python3 例子

    阿里云的oss SDK又是不支持python3 xff0c 头疼头疼 本想改一改它的SDK xff0c 让它支持python2 43 python3 xff0c 无奈里面大量的代码使用不带括号的print xff0c 工作量恐怖 幸好oss
  • 【C语言课程设计】利用结构体数组实现文件内容的增删改查

    啦啦啦 xff0c 又到了学习时间 xff0c 现在给大家介绍结构体数关于文件内容的增删改查 我们先把相关代码写好 xff0c 再使用EGE xff0c 慢慢来不着急 一 文件的打开方式 假设文件名叫list txt 首先我们要建立一个文件
  • Mysql中limit的用法详解

    在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql已经为我们提供了这样一个功能 SELECT FROM table LIMIT offset
  • 在Windows10上安装CodeSoft 2015,系统蓝屏,解决办法

    最近公司电脑更新换代 xff0c 替换成Windows 10系统 xff0c 在安装CodeSoft 2015 标签软件时 xff0c 电脑蓝屏重启 xff0c 软件安装失败 xff0c 且无法卸载 xff0c 之后只能重装系统 在经过系统
  • Win10 WSL下 Ubuntu20.04 安装与卸载 Mysql 8.0

    一 查询并卸载旧的mysql xff08 未安装可以直接跳过 xff09 查看MySQL的依赖项 dpkg list grep mysql 关闭mysql服务 service mysql stop 自动卸载mysql xff08 包括ser
  • ios性能优化实践

    本文将从原理出发 xff0c 解释卡顿发生的原理 xff0c 然后会讲解项目中行之有效的几个优化点 xff0c 最后会展望一下接下来将要尝试的方向 下面进入正题 屏幕显示的原理 基本原理 屏幕显示原理 我们知道 xff0c 远古时代的CRT
  • MATLAB平面几何图形绘制实例

    MATLAB 平面几何图形绘制实例 实例一 运动控制测试图形 以下图形用于运动综合测试 xff0c 平面图形包含直线 圆弧 整圆 锐拐角 钝拐角 xff0c 能比较充分的测试各种轨迹 运动控制性能 输入圆心和半径可以调整图形大小和偏移 xf