fsurf and function handles.

1 view (last 30 days)
David Epstein
David Epstein on 10 Dec 2018
Edited: Stephen23 on 22 Dec 2018
I rewrite my question in the hope of making it clearer.
Let H be a vertical half-plane in bounded by the vertical axis . In H, we use coordinates z, the height, and r, rhe distance from the vertical axis. So . A square card Cwith sidelength 2 lies flat on H, and is pinned through the centre of C to the point . C rotates freely about the pin, while remaining within H.
Now we start rotating Crotating about the pin through its centre at the rate of one revolution per minute, and then we start H rotating about the vertical axis at the rate of one revolution per minute.
The task is to draw the volume swept out by C. Here is my (failed) attempt.
R = 5;
A(:,1) = [1;1]; A(:,2) =[1;-1]; A(:,3)=[-1;1]; A(:,4) = [-1;-1];
A(:,5) = A(:,1);
syms rot(ang);
rot(ang) = [cos(ang),-sin(ang);sin(ang),cos(ang)];
syms edge(i,s);
edge(i,s) = [R;0] + s*A(:,i) + (1-s)*A(:,i+1);
figure; hold;
for i = 1:4
% use? second coordinate of the vector rot(ang)*edge(i,s) to specify funz
% use? first coord, say r, of the vector rot(ang)*edge(i,s) to specify
% funx as r*cos(ang) and funy as r*sin(ang)
fsurf(funx,funy,funz,[0,1,0,2*pi]);
end
  3 Comments
David Epstein
David Epstein on 11 Dec 2018
If it were possible to define a function inside a for loop (which I don't think is possible), then my problem would be solved.
If it were possible to define an anonymous function containing more than one executable statement my problem would be solved.
If I was prepared to write out the function definiitons of 12 different functions with 12 different names (which would require lots of repetitive code) my problem would be solved. There are 4 different strips, and fsurf requires three auxiiary functions, called funx, funy and funz in the documentation for fsurf. The code for each of the four strips would be almost identical.
Perhaps I need to learn how to use symbolic functions to do the job the "right" way.
Stephen23
Stephen23 on 21 Dec 2018
Edited: Stephen23 on 22 Dec 2018
"If it were possible to define a function inside a for loop (which I don't think is possible), then my problem would be solved."
It is possible by defining an anonymous function:
for k = ...
fun = @(...) ...;
...
end

Sign in to comment.

Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!