资源简介
双圆弧样条插值,直接通过两个离散点及其切矢量,计算双圆弧半径及圆心,并作图
代码片段和文件信息
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)
- 上一篇:基于DWT的数字水印算法的MatLab实现
- 下一篇:反距离加权插值
评论
共有 条评论