- Radius can be the magnitude
- Adjust the period to achieve the desired length.
Creating curved line with given parameters
조회 수: 7 (최근 30일)
이전 댓글 표시
Hello
I want to ask if there is easier way to creat a curved line or an arc with given parameters then the way I'm doing it right now. First I creat 2 bigger curved lines, that consist of two lines and a circle between them, that cross each other and find the coordinates of the point where they cross each other as seen on the picture below.

Then I fillter out everything that is under the cross point and only take points that are starting on that cross to plot the curved lines I need as seen below.

My question is if it is possible to skip the first step completely and to creat only the curved lines on the second image if the angles, radius and a length is given. Down below is a code for how I generate all of this.
%Equations for generating x,y coordinates
clc
pz = 6;
radius = 0.8;
length = 0.15;
ap = 0.1;
po = 101.6;
dx = 10^(-pz);
angel1 = 89;
angel2 = 89;
xa = (radius*(sin(angel1)))*-1;
xb = radius*(sin(angel2));
ya = (xa*(tan(angel1)))+(radius/(cos(angel1)))-radius;
%Straight line A
N = 10^(pz);
xpA = xa - (0:N-1)*dx;
xpA = xpA';
xpA = sort(xpA);
xpA = round(xpA,pz);
ypA = (xpA*tan(angel1))+(radius/(cos(angel1)))-radius;
ypA = sort(ypA);
ypA = round(ypA,pz);
%Straight line B
xpB = xb + (0:N-1)*dx;
xpB = xpB';
xpB = round(xpB,pz);
ypB = (-xpB*tan(angel2))+(radius/(cos(angel2)))-radius;
ypB = round(ypB,pz);
%circle
N1 = 2*N;
xk1 = xa + (1:N1)*dx;
xk1 = round(xk1,pz);
xk1 = xk1';
[c,d]= intersect(xk1,min(xpB));
xk = xa +(1:d-1)*dx;
xk = round(xk,pz);
xk = xk';
yk = (sqrt((radius^2)-(xk.^2)))-radius;
yk = round(yk,pz);
%tool shape
X = [xpA;xk;xpB];
Y = [ypA;yk;ypB];
b = po-ap;
x = X(1);
X1 = X-x;
Y1 = Y+b;
X2 = X1+length;
Y2 = Y1;
%coordinates of the point where two tool paths cross each other
[Y1max,Y1ix] = max(Y1);
[Y2max,Y2ix] = max(Y2);
Xi = linspace(X1(Y1ix), X2(Y2ix), 100);
Y1i = interp1(X1,Y1,Xi);
Y2i = interp1(X2,Y2,Xi);
Ydif = sort(Y2i-Y1i);
[val,ind1] = min(abs(Y2i-Y1i));
Xq = interp1(Ydif, Xi, 0);
Yq = interp1(Xi, Y1i, Xq);
Xq_vzdialenost = Xq - X1(Y1ix); % x distance between Y1 peak and Xq
%Tool model
figure
plot(X1,Y1)
hold on
plot(X2,Y1)
plot(Xq, Yq, 'sg', 'MarkerSize', 10)
title ("Tool path model")
xlabel("Feed [mm]")
hold off
text(Xq, Yq, sprintf('\\uparrow\nX = %.4f\nY = %.4f',Xq,Yq), 'HorizontalAlignment','center', 'VerticalAlignment','top')
%Theoretical surface roughness
ind1 = find(X1>X1(Y1ix)-Xq_vzdialenost & X1<X1(Y1ix)+Xq_vzdialenost);
Xi1 = X1(ind1);
Y1ii = interp1(X1,Y1,Xi1);
xi11 = Xi1(1);
Xrh = Xi1 - xi11;
yi11 = Y1ii(1);
Yrh = Y1ii - yi11;
Xrh2 = Xrh+ length;
Yrh2 = Yrh;
Xrh3 = Xrh2 + length;
Yrh3 = Yrh;
Xrh4 = Xrh3 + length;
Yrh4 = Yrh;
Xrh5 = Xrh4 + length;
Yrh5 = Yrh;
figure
tiledlayout(2,1);
ax1 = nexttile;
plot(ax1,Xrh,Yrh,'k')
hold on
plot(ax1,Xrh2,Yrh2,'k')
plot(ax1,Xrh3,Yrh2,'k')
plot(ax1,Xrh4,Yrh2,'k')
plot(ax1,Xrh5,Yrh2,'k')
title ("Theoretical surface roughness")
xlabel("Feed [mm]")
ylabel("Y")
hold off
댓글 수: 0
채택된 답변
Cris LaPierre
2021년 3월 17일
편집: Cris LaPierre
2021년 3월 17일
What about taking the abs of a sin wave? Angle is going to be a function of radius and length, so I consider it a fixed parameter.
r=.8;
l = 0.15;
n=5;
t = 0:l/20:n*l;
y = r*abs(sin(t/l*pi));
plot(t,y)
axis equal
xticks([0:l:0.75])
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Line Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
