《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 4374|回复: 25
收起左侧

[源码] [原创]基于Matlab的制作箭头图[by Fantuanxiaot]

[复制链接]
发表于 2015-6-30 14:58:14 | 显示全部楼层 |阅读模式
本帖最后由 fantuanxiaot 于 2015-6-30 15:00 编辑


有人希望用MATLAB制作箭头图,Fantuanxiaot特此推导了公示,制作一个简单箭头图。

大家收藏一下,可能会有用的。

函数源码:

  1. function ArrowPlot(x1,y1,x2,y2,FaceColor,EdgeColor)
  2. %%  原创箭头作图
  3. %%  by Fantuanxiaot
  4. %%  www.Matlabsky.com
  5. %%  更多请关注Matlab技术论坛
  6. %%  http://www.matlabsky.com/forum-92-1.html
  7. %%  http://www.matlabsky.com/
  8. %%  举例
  9. %  ArrowPlot(1,1,2,2,'r','r')
  10. %  ArrowPlot(-1,-2,-2,-2,'m','c')
  11. %  ArrowPlot(-1,2,-2,-2,'g','b')
  12. %  ArrowPlot(-1,2,-2,2,'g','b')
  13. %%  MAIN
  14. x9=x1+0.9*(x2-x1);
  15. y9=y1+0.9*(y2-y1);
  16. x8=x1+0.8*(x2-x1);
  17. y8=y1+0.8*(y2-y1);
  18. Dis=sqrt((x2-x1)^2+(y2-y1)^2);
  19. if y1==y2
  20.     %  设置在y1==y2的情形下的四个端点
  21.     x91=x9;
  22.     x92=x9;
  23.     y91=y9+0.02*Dis;
  24.     y92=y9-0.02*Dis;
  25.     x81=x8;
  26.     x82=x8;
  27.     y81=y8+0.08*Dis;
  28.     y82=y8-0.08*Dis;
  29. else
  30.     %  设置其他端点
  31.     x91=x9+sqrt((0.02*Dis)^2/(1+((x1-x2)/(y2-y1))^2));
  32.     x92=x9-sqrt((0.02*Dis)^2/(1+((x1-x2)/(y2-y1))^2));
  33.     y91=(x91-x9)*(x1-x2)/(y2-y1)+y9;
  34.     y92=(x92-x9)*(x1-x2)/(y2-y1)+y9;
  35.     x81=x8+sqrt((0.08*Dis)^2/(1+((x1-x2)/(y2-y1))^2));
  36.     x82=x8-sqrt((0.08*Dis)^2/(1+((x1-x2)/(y2-y1))^2));
  37.     y81=(x81-x8)*(x1-x2)/(y2-y1)+y8;
  38.     y82=(x82-x8)*(x1-x2)/(y2-y1)+y8;
  39. end
  40. X=[x1 x92 x82 x2 x81 x91 x1];
  41. Y=[y1 y92 y82 y2 y81 y91 y1];
  42. %  作图
  43. h=fill(X,Y,FaceColor);
  44. hold on
  45. set(h,'EdgeColor',EdgeColor)
复制代码


举例:
  1. %%  举例
  2. %%  by Fantuanxiaot
  3. %%  www.Matlabsky.com
  4. %%  更多请关注Matlab技术论坛
  5. %%  http://www.matlabsky.com/forum-92-1.html
  6. %%  http://www.matlabsky.com/
  7. N=8;
  8. X=(1:N)';
  9. Y=rand(N,1);
  10. XY=[X Y];
  11. FaceColor='g';
  12. EdgeColor='b';
  13. figure('Color','w')
  14. for i=2:N
  15.     x1=XY(i-1,1);
  16.     y1=XY(i-1,2);
  17.     x2=XY(i,1);
  18.     y2=XY(i,2);
  19.     ArrowPlot(x1,y1,x2,y2,FaceColor,EdgeColor);
  20. end
复制代码


ArrowPlot2.jpg

举例2:
  1. figure
  2. subplot(2,2,1)
  3. ArrowPlot(1,1,2,2,'r','r')
  4. subplot(2,2,2)
  5. ArrowPlot(2,-2,2,2,'m','c')
  6. subplot(2,2,3)
  7. ArrowPlot(-1,2,-2,-2,'g','b')
  8. subplot(2,2,4)
  9. ArrowPlot(-1,2,-2,2,'g','b')
复制代码

ArrowPlot1.jpg

评分

参与人数 1贝壳 +6 收起 理由
faruto + 6 感谢您分享自己珍贵的资料

查看全部评分

发表于 2015-7-2 18:16:12 | 显示全部楼层
最好能实现固定到图形对象和缩放不变的特性。
回复 支持 反对

使用道具 举报

发表于 2016-6-25 16:28:01 | 显示全部楼层
感谢分享,希望对我的科研有较大的帮助。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-30 15:10:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-8-1 09:27:12 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-8-4 23:17:15 | 显示全部楼层
好东西,我给收下了
回复 支持 反对

使用道具 举报

发表于 2016-2-8 22:40:33 来自手机 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2016-2-14 20:22:39 | 显示全部楼层
正需要,谢谢了
回复 支持 反对

使用道具 举报

发表于 2016-4-13 17:35:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2016-6-3 03:25:34 | 显示全部楼层
看看源码,学习下.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号-2 

GMT+8, 2022-10-1 13:31 , Processed in 0.069679 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表