Closed-curve point offset
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (1)
KSSV
el 31 de En. de 2020
Editada: KSSV
el 31 de En. de 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 comentarios
KSSV
el 1 de Feb. de 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')
Ver también
Categorías
Más información sobre Curve Fitting Toolbox en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!