Hi, I was wondering if anyone would know how to offset a closed curve where I know the x and y coordinates of the points (black curve) and also know the distance at which I want to create the blue curve and the distance at which I want the red curve.
In short, what I want to get are the coordinates of the red and blue curve points.
I tried with Offset Curve but I couldn't get it to work properly.

답변 (1개)

KSSV
KSSV 2020년 1월 31일
편집: KSSV 2020년 1월 31일

0 개 추천

Try something like this. S is a Affine transformation matrix for scaling.
% circle of radius 1 for demo
th = linspace(0,2*pi) ;
x = cos(th) ;
y = sin(th) ;
o = ones(size(x)) ;
C = [x ; y ;o]' ;
% up scaling by 1.5
cx = 1.5 ; cy = 1.5 ;
S = [cx 0 0 ; 0 cy 0 ; 0 0 1] ;
C0 = C*S ;
x0 = C0(:,1) ; y0 = C0(:,2) ;
% downscaling by 0.5
cx = 0.5 ; cy = 0.5 ;
S = [cx 0 0 ; 0 cy 0 ; 0 0 1] ;
C1 = C*S ;
x1 = C1(:,1) ; y1 = C1(:,2) ;
figure
hold on
plot(x,y,'k')
plot(x0,y0,'b')
plot(x1,y1,'r')

댓글 수: 3

Alejandro Fernández
Alejandro Fernández 2020년 1월 31일
I tried it with my data but it's not focused on 0.0 and it doesn't work either, can you think of anything else?
I don't know the coordinates of the center since it's not a circle.
These are my points (I narrowed it down a bit so as not to have to pass you the total)
20071345 18508878
22889302 22151369
29597266 17896695
37285389 20069946
37867359 6969222
25615370 10795368
17865987 6357039
13822830 16733547
21878513 13550193
18876776 17070247
20071345 18508878
points = [20071345 18508878
22889302 22151369
29597266 17896695
37285389 20069946
37867359 6969222
25615370 10795368
17865987 6357039
13822830 16733547
21878513 13550193
18876776 17070247
20071345 18508878];
x = points(:,1) ;
y = points(:,2) ;
o = ones(size(x)) ;
C = [x y o] ;
center = [mean(x) mean(y) 1] ;
C = C-center ;
cx = 1.5 ; cy = 1.5 ;
S = [cx 0 0 ; 0 cy 0 ; 0 0 1] ;
C0 = C*S+center ;
x0 = C0(:,1) ; y0 = C0(:,2) ;
cx = 0.5 ; cy = 0.5 ;
S = [cx 0 0 ; 0 cy 0 ; 0 0 1] ;
C1 = C*S+[mean(x) mean(y) 1] ;
x1 = C1(:,1) ; y1 = C1(:,2) ;
figure
hold on
plot(x,y,'k')
plot(x0,y0,'b')
plot(x1,y1,'r')

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

제품

질문:

2020년 1월 31일

댓글:

2020년 2월 1일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by