查看: 264|回复: 2|关注: 0

[已解决] 多曲线区域颜色填充问题

[复制链接]

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
大佬请留步,帮小弟看看,写个代码,将图中各区域填充为不同的颜色,谢谢
syms P Q
z=0.4;Us=1.1;Udc=2;m=1
U1=m*Udc*sqrt(3)/2/sqrt(2)

h2=ezplot(@(P,Q)myfun2(P,Q,z,Us))
set(h2,'Color',[0,0,1])
hold on

h3=ezplot(@(P,Q)myfun3(P,Q,Us,U1,z))
set(h3,'Color',[1,0,0])
hold on

h1=ezplot('P^2+Q^2-1')
set(h1,'Color',[0,0,0])
hold on

set(gca,'XAxisLocation','origin')
set(gca,'YAxisLocation','origin')
axis equal
axis([-2.5,2.5,-1.5,1.5])

function w2=myfun2(P,Q,z,Us)
         q=z*Q+(Us^2+sqrt((2*z*Q+Us^2)^2-4*z^2*(P^2+Q^2)))/2
         w2=P^2+Q^2-q  
end

function w3=myfun3(P,Q,Us,U1,z)
         w3=P^2+(Q-U1^2/z)^2-(U1*Us/z)^2
end

微信图片_20200712231144.jpg

fig8d.m

583 Bytes, 下载次数: 0

代码

回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

602 麦片

财富积分


5001500


24

主题

320

帖子

69

最佳答案
  • 关注者: 11
发表于 2020-7-13 10:24:14 | 显示全部楼层 |此回复为最佳答案
采用多边形求交集,并集,异或的方法去实现;
都是matlab自带的函数;

首先用ezplot绘制的图是等值线=0的多线段线,通过temp1=h1.ContourMatrix(:,2:end);获取离散的xy点;
接下来就是你需要填充的图是三个多边形的交,并,差,异或集合了,仔细仔细分析下
代码如下:
  1. syms P Q
  2. z=0.4;Us=1.1;Udc=2;m=1;
  3. U1=m*Udc*sqrt(3)/2/sqrt(2);

  4. h2=ezplot(@(P,Q)myfun2(P,Q,z,Us));
  5. set(h2,'Color',[0,0,1])
  6. hold on

  7. h3=ezplot(@(P,Q)myfun3(P,Q,Us,U1,z));
  8. set(h3,'Color',[1,0,0])
  9. hold on

  10. h1=ezplot('P^2+Q^2-1');
  11. set(h1,'Color',[0,0,0])
  12. hold on

  13. set(gca,'XAxisLocation','origin')
  14. set(gca,'YAxisLocation','origin')
  15. axis equal
  16. axis([-2.5,2.5,-2,2])

  17. temp1=h1.ContourMatrix(:,2:end);
  18. temp2=h2.ContourMatrix(:,2:end);
  19. temp3=h3.ContourMatrix(:,2:end);
  20. poly1 = polyshape(temp1(1,:),temp1(2,:));
  21. poly2 = polyshape(temp2(1,:),temp2(2,:));
  22. poly3 = polyshape(temp3(1,:),temp3(2,:));

  23. hold on
  24. polyout23 = intersect(poly2,poly3);
  25. polyout13 = intersect(poly1,poly3);
  26. polyout12 = intersect(poly1,poly2);

  27. %% 主要是多边形的求交,求并,求补集,
  28. polyout1=subtract(polyout23,polyout13);
  29. polyout2=polyout13;
  30. polyout34=subtract(poly2,union(poly1,poly3));
  31. polyout5=intersect(poly1,union(poly2,poly3));
  32. polyout6 = subtract(poly1,polyout5);
  33. plot(polyout1)
  34. plot(polyout2)
  35. plot(polyout34)
  36. plot(polyout5)
  37. plot(polyout6)
  38. %plot(polyout1_6)

  39. function w2=myfun2(P,Q,z,Us)
  40.          q=z*Q+(Us^2+sqrt((2*z*Q+Us^2)^2-4*z^2*(P^2+Q^2)))/2 ;
  41.          w2=P^2+Q^2-q  ;
  42. end

  43. function w3=myfun3(P,Q,Us,U1,z)
  44.          w3=P^2+(Q-U1^2/z)^2-(U1*Us/z)^2;
  45. end
复制代码
附图:
untitled1.jpg help界面:
untitled.jpg

回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 2020-7-13 11:09:57 | 显示全部楼层
15631202458 发表于 2020-7-13 10:24
采用多边形求交集,并集,异或的方法去实现;
都是matlab自带的函数;

大佬回答得太精彩了
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

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