• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Matlab
  • 标签:

资源简介

双圆弧样条插值,直接通过两个离散点及其切矢量,计算双圆弧半径及圆心,并作图

资源截图

代码片段和文件信息

function [R_1R_2]=double_circle_sample(xyt)
%测试点为x,y
%k:两点连线的斜率
%angle:与x轴的夹角
%angle_zhuanhuan=arctan(k):坐标变换角度
    k=(y(1)-y(2))/(x(1)-x(2));
    angle_zhuanhuan=abs(atan(k));
    angle=[abs(atan(t(1)))abs(atan(t(2)))];
%坐标变换
    xx=[x(1)*cos(angle_zhuanhuan)+y(1)*sin(angle_zhuanhuan)x(2)*cos(angle_zhuanhuan)+y(2)*sin(angle_zhuanhuan)];
    yy=[x(1)*sin(angle_zhuanhuan)-y(1)*cos(angle_zhuanhuan)x(2)*sin(angle_zhuanhuan)-y(2)*cos(angle_zhuanhuan)];
    if (k>0)
        %if(t(2)>0)
            %angle=[(angle(1)-angle_zhuanhuan)(angle_zhuanhuan-angle(2))];
        %end
        %if(t(2)<0)
            angle=[(angle(1)-angle_zhuanhuan)(angle(2)+angle_zhuanhuan)];
        %end
    elseif (k==0)
        disp(‘不存在圆弧‘);
    elseif (k<0)
        angle=[(angle(1)+angle_zhuanhuan)(angle(2)-angle_zhuanhuan)];
    end
%平移点1至原点
    pingyi=xx(1);
    xxx(1)=xx(1)-pingyi;
    xxx(2)=xx(2)-pingyi;
%两点距离
    L=sqrt((xx(1)-xx(2))^2+(yy(1)-yy(2))^2); 
%定义fai
    fai=[abs(angle(1))abs(angle(2))];
%求两圆半径
    if (fai(1)>fai(2)) %判定两夹角的大小
        R_1=(L)/(2*(sin((fai(1)+fai(2))/2))^2)*(sin(fai(2))-sin((fai(1)-fai(2))/2));  
        R_2=(L-2*R_1*sin(fai(1)))/(2*sin((fai(1)-fai(2))/2));
    end
    if (fai(1)

评论

共有 条评论

相关资源