Path: news.mathworks.com!not-for-mail From: <HIDDEN> Newsgroups: comp.soft-sys.matlab Subject: Re: 3d arc plotting Date: Tue, 27 Mar 2012 22:37:21 +0000 (UTC) Organization: The MathWorks, Inc. Lines: 38 Message-ID: <jktff1$jl7$1@newscl01ah.mathworks.com> References: <jks456$jqq$1@newscl01ah.mathworks.com> Reply-To: <HIDDEN> NNTP-Posting-Host: www-05-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: newscl01ah.mathworks.com 1332887841 20135 172.30.248.37 (27 Mar 2012 22:37:21 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Tue, 27 Mar 2012 22:37:21 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 1187260 Xref: news.mathworks.com comp.soft-sys.matlab:762386 "satish sahu" <satishs@iitk.ac.in> wrote in message <jks456$jqq$1@newscl01ah.mathworks.com>... > i have three point center point(p0), begin point(p1) and end point(p2). > p0=(x0,y0,z0) > p1=(x1,y1,z1) > p2=(x2,y2,z2) > want to plot arc on 3d, > > case(1)=(x0,y0,z0,x1,y1,z1,x2,y2,z2) all are known > > case(2)=(x0,y0,z0,x1,y1,z1,z2) are known (x2 and y2 are unknown) > > plz reply - - - - - - - - - - I assume that by "center point(p0)" you mean that p0 is to be at the center of a circular arc between p1 and p2. In your case(2) the possible location of p2 is any point on the surface of a sphere with center at p0 and with norm(p1-p0) as radius. That means that knowing only z2 is not sufficient to uniquely determine p2 - it could be anywhere in a ring at height z2. Case(2) is not a well-formed problem. As for case(1) the following code should draw the arc. It works even if p0 is not at the midpoint of the arc. % The three points as row vectors p0 = randn(1,3); p2 = randn(1,3); p1 = randn(1,3); % You choose p0,p1,p2 % The engine t = p2-p0; u = p1-p0; v = p1-p2; w = cross(t,u); t2 = sum(t.^2); u2 = sum(u.^2); w2 = sum(w.^2); c = p0+(t2*sum(u.*v)*u-u2*sum(t.*v)*t)/(2*w2); % <-- The center r = 1/2*sqrt(t2*u2*sum(v.^2)/w2); % <-- The radius a = p1-c; a = a/norm(a); b = cross(w,a); b = b/norm(b); n = 100; ang = linspace(0,mod(atan2(dot(p2-c,b),dot(p2-c,a)),2*pi),n).'; T = bsxfun(@plus,r*(cos(ang)*a+sin(ang)*b),c); % The plot of the circular arc from p1 to p2 plot3(T(:,1),T(:,2),T(:,3)) You can add the points p0, p1, and p2 to this plot to verify that they are on the arc. Roger Stafford