fsurf and function handles.

1 次查看(过去 30 天)
David Epstein
David Epstein 2018-12-10
编辑: Stephen23 2018-12-22
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 个评论
David Epstein
David Epstein 2018-12-11
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 2018-12-21
编辑:Stephen23 2018-12-22
"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

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by