Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. <script>
  2. var zoom = 10;
  3. var w1 = 0, w2 = 0;
  4. function init() {
  5. Draw();
  6. }
  7.  
  8. var Canvas = document.getElementById('canvasId');
  9. var Ctx = null;
  10.  
  11. var Width = Canvas.width;
  12. var Height = Canvas.height;
  13.  
  14. function MaxX() {
  15. return zoom;
  16. }
  17.  
  18. function MinX() {
  19. return -zoom;
  20. }
  21.  
  22. function MaxY() {
  23. return MaxX() * Height / Width;
  24. }
  25.  
  26. function MinY() {
  27. return MinX() * Height / Width;
  28. }
  29.  
  30. function XC(x) {
  31. return (x - MinX()) / (MaxX() - MinX()) * Width - w1;
  32. }
  33.  
  34. function YC(y) {
  35. return Height - (y - MinY()) / (MaxY() - MinY()) * Height - w2;
  36. }
  37.  
  38. var F2 = function(x) {
  39. return (((document.getElementById("a").value)*2)*(Math.cos(x)/Math.sin(x)));
  40. };
  41.  
  42. var F1 = function(x) {
  43. return ((document.getElementById("a").value)*(1-Math.cos(2*x)));
  44. };
  45.  
  46. function Draw() {
  47. if (Canvas.getContext) {
  48. Ctx = Canvas.getContext('2d');
  49. Ctx.clearRect(0,0,Width,Height);
  50. DrawAxes();
  51. RenderFunction(F1, F2);
  52. }
  53. }
  54.  
  55.  
  56. function XTickDelta() {
  57. return 1;
  58. }
  59.  
  60. function YTickDelta() {
  61. return 1;
  62. }
  63.  
  64. function DrawAxes() {
  65. Ctx.strokeStyle="#000";
  66. Ctx.save();
  67. Ctx.lineWidth = 1;
  68. Ctx.beginPath();
  69. Ctx.moveTo(XC(0),YC(0));
  70. Ctx.lineTo(XC(0),YC(MaxY())+w2);
  71. Ctx.stroke();
  72.  
  73. var del = Math.floor(zoom / 10);
  74.  
  75. Ctx.beginPath();
  76. Ctx.moveTo(XC(0),YC(0));
  77. Ctx.lineTo(XC(0),YC(MinY())+w2);
  78. Ctx.stroke();
  79. var delta = YTickDelta();
  80. var tt3 = Math.floor(-w2 / 10);
  81. tt3 = (tt3 > 0) ? tt3 : 1;
  82. for (var i = 1; (i * delta) < MaxY()+ tt3; ++i) { //сетка
  83. Ctx.beginPath();
  84. if(del < 2){
  85. Ctx.moveTo(XC(0) - Width/2 + w1,YC(i * delta));
  86. Ctx.lineTo(XC(0) + Width/2 + w1,YC(i * delta));
  87. //Ctx.fillText(i, XC(0)+2,YC(i * delta)-3);
  88. }else if(del > 1 && i % del == 0){
  89. Ctx.moveTo(XC(0) - Width/2 + w1,YC(i * delta));
  90. Ctx.lineTo(XC(0) + Width/2 + w1,YC(i * delta));
  91. //Ctx.fillText(i, XC(0)+2,YC(i * delta)-3);
  92. }
  93. Ctx.stroke();
  94. }
  95.  
  96. var delta = YTickDelta();
  97. var tt4 = Math.floor(-w2 / 10);
  98. tt4 = (tt4 < 0) ? tt4 : -1;
  99. for (var i = 1; (i * delta) > MinY()+ tt4; --i) { //сетка
  100. Ctx.beginPath();
  101. if(i == 0) Ctx.lineWidth = 3; else Ctx.lineWidth = 1;
  102. if(del < 2){
  103. Ctx.moveTo(XC(0) - Width/2 + w1,YC(i * delta));
  104. Ctx.lineTo(XC(0) + Width/2 + w1,YC(i * delta));
  105. //Ctx.fillText(i, XC(0)+2,YC(i * delta)-3);
  106. }else if(del > 1 && i % del == 0){
  107. Ctx.moveTo(XC(0) - Width/2 + w1,YC(i * delta));
  108. Ctx.lineTo(XC(0) + Width/2 + w1,YC(i * delta));
  109. //Ctx.fillText(i, XC(0)+2,YC(i * delta)-3);
  110. }
  111. Ctx.stroke();
  112. }
  113.  
  114. Ctx.beginPath();
  115. Ctx.moveTo(XC(0),YC(0));
  116. Ctx.lineTo(XC(MaxX())+w1,YC(0));
  117. Ctx.stroke();
  118.  
  119. Ctx.beginPath();
  120. Ctx.moveTo(XC(0),YC(0));
  121. Ctx.lineTo(XC(MinX())+w1,YC(0));
  122. Ctx.stroke();
  123.  
  124. var delta = XTickDelta();
  125. var tt1 = Math.floor(w1 / 10);
  126. tt1 = (tt1 > 0) ? tt1 : 1;
  127. for (var i = 1; (i * delta) < MaxX() + tt1; ++i) { //сетка
  128. Ctx.beginPath();
  129. if(del < 2){
  130. Ctx.moveTo(XC(i * delta),YC(0)-Height/2 + w2);
  131. Ctx.lineTo(XC(i * delta),YC(0)+Height/2 + w2);
  132. //Ctx.fillText(i, XC(i * delta)+2,YC(0)-3);
  133. }else if(del > 1 && i % del == 0){
  134. Ctx.moveTo(XC(i * delta),YC(0)-Height/2 + w2);
  135. Ctx.lineTo(XC(i * delta),YC(0)+Height/2 + w2);
  136. //Ctx.fillText(i, XC(i * delta)+2,YC(0)-3);
  137. }
  138. Ctx.stroke();
  139. }
  140.  
  141. var delta = XTickDelta();
  142. var tt2 = Math.floor(w1 / 10);
  143. tt2 = (tt2 < 0) ? tt2 : -1;
  144. for (var i = 1; (i * delta) > MinX()+ tt2; --i) { //сетка
  145. Ctx.beginPath();
  146. if(i == 0) Ctx.lineWidth = 3; else Ctx.lineWidth = 1;
  147. if(del < 2){
  148. Ctx.moveTo(XC(i * delta),YC(0)-Height/2 + w2);
  149. Ctx.lineTo(XC(i * delta),YC(0)+Height/2 + w2);
  150. //Ctx.fillText(i, XC(i * delta)+2,YC(0)-3);
  151. }else if(del > 1 && i % del == 0){
  152. Ctx.moveTo(XC(i * delta),YC(0)-Height/2 + w2);
  153. Ctx.lineTo(XC(i * delta),YC(0)+Height/2 + w2);
  154. //Ctx.fillText(i, XC(i * delta)+2,YC(0)-3);
  155. }
  156. Ctx.stroke();
  157. }
  158. Ctx.restore();
  159. }
  160.  
  161.  
  162. var XSTEP = (MaxX()-MinX())/Width;
  163.  
  164. function RenderFunction(f1, f2){
  165. var first = true;
  166. Ctx.beginPath();
  167. Ctx.strokeStyle="#FF0000";
  168. for (var z = MinX(); z <= MaxX(); z += XSTEP){
  169. var y = f1(Math.abs(z));
  170. var x = f2(Math.abs(z));
  171.  
  172. if (first){
  173. Ctx.moveTo(XC(x),YC(y));
  174. first = false;
  175. }else{
  176. Ctx.lineTo(XC(x),YC(y));
  177. }
  178. }
  179. Ctx.stroke();
  180. }
  181.  
  182. Canvas.addEventListener("wheel", onWheel);
  183. function onWheel(e) {
  184. e = e || window.event;
  185. var delta = e.deltaY || e.detail || e.wheelDelta;
  186. zoom += (-delta > 0 && zoom > 1) ? -1 : 1;
  187. Draw();
  188. }
  189.  
  190. var activ=false;
  191. function activate() {
  192. activ=!activ;
  193. }
  194. Canvas.addEventListener("mousemove", function(e){
  195. if(activ) {
  196. w1 -= e.movementX;
  197. w2 -= e.movementY;
  198. Draw();
  199. }
  200. });
  201.  
  202. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement