米米米米粒儿~ 2022-02-25 17:11 采纳率: 100%
浏览 157
已结题

matlab中画出的圆存在缺口,如何解决?

问题遇到的现象和发生背景

目的是想要通过已有的圆盘数据,生成圆盘。由于后续需要通过遍历圆盘上的点,计算圆盘间的最小距离,计算量较大,故以直径最大的圆角度100等分所得每段距离为标尺进行后续圆盘的角度划分。

问题相关代码,请勿粘贴截图
clc;             %清除命令窗口的内容
clear all;       %清除工作空间的所有变量,函数,和MEX文件
close all;       %关闭所有的figure窗口
% 画出三维的圆
all1=load('模拟裂隙数据.txt');  %读取裂隙文件中的裂隙数据
[m,n]=size(all1);
all=all1;
d=zeros(m,1);%定义用于存储每个圆盘直径的数组
  for i=1:m %遍历数组 将所需列信息进行存储提取
        d(i,:)=all(i,4); 
  end
Rmax=max(d)/2;%获取最大半径
 for i=1:m   
%%%%%%%%裂隙面法向量%%%%%%%
A=cos(all(i,5)*3.14/180)*sin(all(i,6)*3.14/180);
B=sin(all(i,5)*3.14/180)*sin(all(i,6)*3.14/180);
C=cos(all(i,6)*3.14/180);
%%%%%%%裂隙圆盘圆心及直径%%%%%%%
   r1=all(i,1);         
   r2=all(i,2);
   r3=all(i,3);
n=[A B C] ;%法向量
r=d(i)/2 ; %圆盘半径
c=[r1 r2 r3]; %圆心坐标
standard_theta=(2*pi/100)*(Rmax/r);%以最大的圆为划分标准,确保每个圆盘的细分程度相同
 theta=(0:standard_theta:2*pi)';%theta角从0到2*pi
 a=cross(n,[1 0 0]);%n与i叉乘,求取a向量
 if ~any(a)%如果a为零向量,将n与j叉乘
     a=cross(n,[0 1 0]);
 end
 b=cross(n,a);%求取b向量
 a=a/norm(a);%单位化a向量
 b=b/norm(b);%单位化b向量
 c1=c(1)*ones(size(theta,1),1);
 c2=c(2)*ones(size(theta,1),1);
 c3=c(3)*ones(size(theta,1),1);
 num=floor((r/Rmax)*100)+1;%计算生成圆环所划分的点的数量
 cell_x{i}=zeros(1,num);%利用cell数组存储每个圆上的x,y,z坐标
 cell_y{i}=zeros(1,num);
 cell_z{i}=zeros(1,num);
 x=c1+r*a(1)*cos(theta)+r*b(1)*sin(theta);%圆上各点的x坐标
 cell_x{i}=x'; 
 y=c2+r*a(2)*cos(theta)+r*b(2)*sin(theta);%圆上各点的y坐标
 cell_y{i}=y';
 z=c3+r*a(3)*cos(theta)+r*b(3)*sin(theta);%圆上各点的z坐标
 cell_z{i}=z';
 plot3(x,y,z)
 hold on
 end

运行结果及报错内容

img

所得图像中,可以明显观察到圆上存在缺口

我的解答思路和尝试过的方法

考虑到是否是在对角度划分时的精度问题,但未找到解决方法

我想要达到的结果

希望得到的圆能消除缺口,上述代码是我在网上分享的代码上拙劣修改后所得,本人matlab代码水平较次,如果有人愿意对优化代码指点一二,将不胜感激!

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2022-02-25 19:46
    关注

    你好,请用

      plot3([x(:);x(1)],[y(:);y(1)],[z(:);z(1)])
     
    

    替换掉你的47行即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 C++ /QT 内存权限的判断函数列举
  • ¥15 深度学习GFnet理解问题
  • ¥15 单细胞小提琴堆叠图代码
  • ¥80 LS dyna mpp并行报错
  • ¥50 升级strust2版本到2.3.15.1后使用ognl3.0.6.jar windows环境中没有问题,但部署到linux环境报错
  • ¥15 vue页面,node封装接口
  • ¥15 求TMS320F280039C工程模板!
  • ¥15 delphi+fastreport实现分组补空打印问题
  • ¥15 使用python把两台mysql数据库服务器数据导出和导入
  • ¥15 NodeBB论坛配置Apache Solr中文搜索引擎的详细教程