EDA365电子论坛网
标题:
Matlab之贝塞尔曲线的逆应用
[打印本页]
作者:
haidaowang
时间:
2020-9-21 11:17
标题:
Matlab之贝塞尔曲线的逆应用
/ u+ ^0 Q& D, p* p2 e
这一题是已知两个端点以及控制点与端点的斜率和经过的一点。其实也就是要求出两个控制点。这一题很显然已知端点与控制点有垂直切线,所以可得到x2 = -1, x3 = 1。这样就可以把x(t)表示出来了。对于求y(t)的表达式我用到了对称性,所以y2 = y3。然后再用已知点求出x(t)中t的值代入y(t)便可求出y2与y3。这一题便解决了。这一题要注意的是画图的时候不能有变量,必须是确定的。所以可以看到我后面又有赋值的过程。之前显示变量是为了看到贝塞尔方程。
5 O2 m& Z2 q5 r/ R
2 M7 w1 [# L1 q0 o# ^6 S
; @% l( q4 P: l9 A& b# [8 \7 i3 ]( ]
. F r6 K _7 ]$ F5 q* `
% function 183 1
4 y: P" P. H7 N/ \* _9 P$ Q
% given two endpoints(-1,0),(1,0) and a passed point(0,1) to calculate
" Q# Q' q4 d3 [! H3 l
% Bezier spline
( b+ Q2 m; ~$ q
% author:ChenYu
4 h! T& v2 u2 l0 J# E8 e
% ID number:12353032
7 ^4 G' z( ]( |' u+ y
% Input :None
* B+ l2 E/ T' ]% j9 w
% Output:A picture.
, Y4 i! m/ K- A$ D0 q' S
function page_183_1_Bezier_spline
8 q6 B0 S2 D, {+ Y
x1 = -1;
( L9 X* X. S) K7 _
x2 = -1;
0 M! Q9 o. ?- d( N
x3 = 1;
" ?; u- P* N' O- B5 P* u2 ^
x4 = 1;
, l5 M. w3 _8 Z# f7 Y
y1 = 0;
9 `) A; G; t4 P$ [! b
y4 = 0;
8 V* K, j4 K3 P
x5 = 0;
- ~1 ], s7 I( K* h- U$ t
y5 = 1;
4 R$ j4 `: b( k. \8 m7 r
bx = 3*(x2 - x1);
& N: X3 E; S+ D& v+ K- z- V
cx = 3*(x3 - x2) - bx;
. r1 i6 R+ u. K: m2 }( W" |
dx = x4 - x1 - bx -cx;
% z4 R3 H' o# e) y- V) z% s& e6 {
syms t;
9 B4 `- w q- I- R# g ?1 I
disp('x关于t的表达式');
- _% p5 _" o. |" F
x = x1 + bx*t + cx*t*t + dx*(t^3) %得出x关于t的表达式
0 d* n+ b" L+ `, w& f
result1 = solve(x1 + bx*t + cx*t*t + dx*(t^3),'t');%找出经过(0,1)时若x = 0时t的值
& C' @6 K( g4 c
for i = 1:3
7 [, j: i8 B$ y {+ I
if result1(i) >= 0&&result1(i) <=1
6 D1 P" {) m0 f* Q8 I3 {3 c) l
t0 = result1(i);
! J# @! g/ U) Q- x6 u) N0 `
end
: R3 A$ c# ~, U
end
9 p4 G. m7 n. q, t% r+ N" A* u* E
syms y2 y3
! L1 h# R0 V2 y8 o9 }( W* l' S: X
%因为我们可以发现(0,1)在两个定端点的垂直平分线上,所以我们可以得出y2 = y3
* e ~$ _5 T% w" d, N' B
y2 = y3;
. B( J- ^8 K+ t$ L. h7 Z2 a# L7 y
by = (3*(y2 - y1));
6 d4 {: [: ` z0 b2 O
cy = (3*(y3 - y2) - by);
+ u% a: b; q. X' M5 H
dy = (y4 - y1 - by -cy);
7 o; W8 H/ E; S% ^1 ?1 h. ?- }
ty = solve(y1 + by*t0 + cy*t0*t0 + dy*(t0^3)-1);%得出x = 0,得到的t带入,求得y2
# `' U+ u* o: D- K. Q2 n! Q$ S, L1 G
disp('y关于t的表达式');
7 b! i# G/ E) s, U; R+ s
y = y1 + subs(by,ty)*t + (subs(cy,ty))*t*t + subs(dy,ty)*(t^3) %得出y关于t的表达式
9 J) ^1 G1 s* Y+ Q) \ K
tp = 0:0.001:1;
! a0 B2 v5 }. t
xp = x1 + bx.*tp + cx.*tp.*tp + dx.*(tp.*tp.*tp);
1 |, F z7 j+ Q8 e$ ^4 O) `
yp = y1 + subs(by,ty).*tp + (subs(cy,ty)).*tp.*tp + subs(dy,ty).*(tp.*tp.*tp);
. h* ]6 t( A. A5 R
plot(xp,yp);
7 I q% _) x, g; U( Z
& o- O7 [' ^2 a7 I- a
最后结果(图发现黏贴不上来):
) C; H$ }& `( Z: S
( j# v( `+ Z7 {' ?, W
8 o& k" B/ Q1 c, ^7 i" w, h7 Q
6 t" C+ ^2 Y. k8 s! l4 V) ]
page_183_1_Bezier_spline
+ f. C9 k7 x9 \
x关于t的表达式
/ ^, B! ]+ Z. C w
! m9 `3 U9 a. V# W
x =
1 N* n6 A. G; b% L: u% r J
! M* l4 l. V2 z
- 4*t^3 + 6*t^2 - 1
q; ^5 W P0 P) f9 R
' p4 j% |( _+ o, t( N- Y
y关于t的表达式
8 I, R4 N/ a ^5 B* c+ V( b
+ J+ P5 p: J8 O/ N+ @6 a
y =
# q8 L. T k5 N1 r3 P- Y
5 u2 h9 Y+ V! ^: C$ u. I
- 4*t^2 + 4*t
作者:
regngfpcb
时间:
2020-9-21 13:20
Matlab之贝塞尔曲线的逆应用
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2