HTML5 – 渲染简单的电路

前端之家收集整理的这篇文章主要介绍了HTML5 – 渲染简单的电路前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一套相对简单的电路.小型仅涉及电阻器,电容器,电感器和微调器/微调器(即:三端可变电阻器).

我试图找到一种从节点电压方程矩阵中渲染这些电路的简单方法.我不需要计算电流/电压值(我已经能够做到这一点).

我对如何在HTML5中渲染2D形状有基本的了解.在这一点上,我只需要一种简单的方法来通过线条放置和连接形状.我总是可以做一个简单的放置,但是关于如何避免重新发明轮子的任何建议都会很棒.

谢谢.

解决方法

对不起已经有一段时间了,但我已经完成了我答应你的图书馆了.使用它,我可以创建这样的电路:

我已经在javascript中创建了一个简化的绘图系统,您可以通过构建一个简短的库来使用它.将代码复制并粘贴到您的页面中,然后保留它.如果你想改变它,要么问我(或其他知道Javascript的人),要么在W3Schools或Mozilla MDN等网站上学习.代码需要一个id为“canvas”的canvas元素.代码

  1. "use strict"
  2.  
  3. var wW=window.innerWidth;
  4. var wH=window.innerHeight;
  5. var canvasHTML=document.getElementById("canvas");
  6. canvasHTML.width=wW;
  7. canvasHTML.height=wH;
  8. var ctx=canvasHTML.getContext("2d");
  9. var ix;
  10. var iy;
  11. var x;
  12. var y;
  13. var d;
  14. var dx;
  15. var dy;
  16.  
  17. function beginCircuit(a,b)
  18. {
  19. ctx.lineWidth=1.5;
  20. ctx.strokeStyle="#000";
  21. ctx.beginPath();
  22. x=a;
  23. y=b;
  24. d=0;
  25. dx=1;
  26. dy=0;
  27. ix=x;
  28. iy=y;
  29. ctx.moveTo(x,y);
  30. drawWire(50);
  31. drawPower();
  32. }
  33.  
  34. function endCircuit()
  35. {
  36. ctx.lineTo(ix,iy);
  37. ctx.stroke();
  38. }
  39.  
  40. function drawWire(l)
  41. {
  42. x+=dx*l;
  43. y+=dy*l;
  44. ctx.lineTo(x,y);
  45. }
  46.  
  47. function drawPower()
  48. {
  49. var n;
  50. drawWire(10);
  51. n=3;
  52. ctx.moveTo(x+10*dy,y+10*dx);
  53. ctx.lineTo(x-10*dy,y-10*dx);
  54. x+=dx*5;
  55. y+=dy*5;
  56. while(n--)
  57. {
  58. ctx.moveTo(x+15*dy,y+15*dx);
  59. ctx.lineTo(x-15*dy,y-15*dx);
  60. x+=dx*5;
  61. y+=dy*5;
  62. ctx.moveTo(x+10*dy,y+10*dx);
  63. ctx.lineTo(x-10*dy,y-10*dx);
  64. if(n!=0)
  65. {
  66. x+=dx*5;
  67. y+=dy*5;
  68. }
  69. }
  70. ctx.moveTo(x,y);
  71. drawWire(10);
  72. }
  73.  
  74. function drawCapacitor()
  75. {
  76. drawWire(22.5);
  77. ctx.moveTo(x+10*dy,y-10*dx);
  78. x+=dx*5;
  79. y+=dy*5;
  80. ctx.moveTo(x+10*dy,y-10*dx);
  81. ctx.moveTo(x,y);
  82. drawWire(22.5);
  83. }
  84.  
  85. function drawInductor()
  86. {
  87. var n,xs,ys;
  88. drawWire(9);
  89. n=4;
  90. xs=1+Math.abs(dy);
  91. ys=1+Math.abs(dx);
  92. x+=dx*6;
  93. y+=dy*6;
  94. ctx.scale(xs,ys);
  95. while(n--)
  96. {
  97. ctx.moveTo(x/xs+5*Math.abs(dx),y/ys+5*dy);
  98. ctx.arc(x/xs,y/ys,5,Math.PI/2*dy,Math.PI+Math.PI/2*dy,1);
  99. x+=6.5*dx;
  100. y+=6.5*dy;
  101. if(n!=0)
  102. {
  103. if(dx>=0)
  104. {
  105. ctx.moveTo(x/xs-5*dx,y/ys-5*dy);
  106. }
  107.  
  108. ctx.moveTo(x/xs-5*dx,y/ys-5*dy);
  109. ctx.arc(x/xs-6.5/2*dx,y/ys-6.5/2*dy,1.5,1);
  110. }
  111. }
  112. ctx.moveTo(x/xs-1.75*dx,y/ys-1.75*dy);
  113. ctx.scale(1/xs,1/ys);
  114. ctx.lineTo(x,y);
  115. drawWire(9);
  116. }
  117.  
  118. function drawTrimmer()
  119. {
  120. ctx.moveTo(x+35*dx-7*dy,y+35*dy-7*dx);
  121. ctx.lineTo(x+15*dx+7*dy,y+15*dy+7*dx);
  122. ctx.moveTo(x+13*dx+4*dy,y+13*dy+4*dx);
  123. ctx.lineTo(x+17*dx+10*dy,y+17*dy+10*dx);
  124. ctx.moveTo(x,y);
  125. drawCapacitor();
  126. }
  127.  
  128. function drawResistor()
  129. {
  130. var n;
  131. drawWire(10);
  132. n=5;
  133. x+=dx*5;
  134. y+=dy*5;
  135. while(n--)
  136. {
  137. ctx.lineTo(x-5*dy,y-5*dx);
  138. ctx.lineTo(x+5*dy,y+5*dx);
  139. x+=5*dx;
  140. y+=5*dy;
  141. }
  142. ctx.lineTo(x,y);
  143. drawWire(10);
  144. }
  145.  
  146. function turnClockwise()
  147. {
  148. d++;
  149. dx=Math.cos(1.570796*d);
  150. dy=Math.sin(1.570796*d);
  151. }
  152.  
  153. function turnCounterClockwise()
  154. {
  155. d--;
  156. dx=Math.cos(1.570796*d);
  157. dy=Math.sin(1.570796*d);
  158. }

然后创建一个新的< script type =“text / javascript”> ….< / script>标记并在标记之间放置您的绘图代码.绘图代码的工作方式如下:

首先调用函数beginCircuit(x,y).在括号内,将想要启动电路的x和y坐标放在,如下所示:beginCircuit(200,100).这将在您指定的坐标处绘制电线和电池(以像素为单位).电池和电线一起占据屏幕上100个像素的空间.

然后,您可以调用以下任何功能

drawWire(长度)

绘制一条在电路末端指定长度的导线.占用空间长度.

turnClockwise(长度)

转动下一个命令顺时针旋转90°的方向.没有空间.

turnCounterClockwise(长度)

转动下一个命令逆时针旋转90°的方向.没有空间.

drawCapacitor(长度)

在电路末端画一个电容.占50px.

drawInductor(长度)

在电路末端绘制一个电感.占50px.

drawResistor(长度)

在电路末端画一个电阻.占50px.

drawTrimmer(长度)

在电路末端画一个电阻.占50px.

完成绘图电路后,使用函数endCircuit()关闭然后绘制电路.它会自动从您停止的点到电路的开始画一条线.

我知道这很多事情要做,但是一旦理解了它,这真的是一种非常简单灵活的方法.如果你想看到这个,请到这里:http://jsfiddle.net/mindoftea/ZajVE/.请试一试,如果你有问题,请评论一下.

谢谢,希望这有帮助!

猜你在找的HTML5相关文章