Closed-curve point offset
7 views (last 30 days)
Show older comments
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.
0 Comments
Answers (1)
KSSV
on 31 Jan 2020
Edited: KSSV
on 31 Jan 2020
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 Comments
KSSV
on 1 Feb 2020
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')
See Also
Categories
Find more on Curve Fitting Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!