画布没有正确绘制指数或多行

时间:2015-11-11 06:35:53

标签: javascript html canvas

我有一个程序,用JavaScript在HTML画布上绘制一条线。 HTML包含一个500px乘500px的画布和一个id为“LineBoxHolder”的div,里面有一定数量的项目,从0到无穷大选择类.equation的元素,每个都取决于所选的值,类型号和类.eqNum的许多输入。这是一个澄清该部分的图表:

 selected value | number of "number" inputs added
 ------------------------------------------------
 number         | 1
 linear         | 2
 quadratic      | 3
 power          | 2
 exponential    | 2

例如,如果您有3个选择框,1选择“线性”,2选择“二次”,则总共有8个“.eqNum”输入。对不起,如果我没有多大意义,我午夜时分,我最近有很多功课(8年级),但如果这太混乱了我会清理它并明天增加赏金。无论如何,这里的JavaScript代码简化为我认为最重要的部分。顺便说一下,我的问题是我不能绘制多行图,除了“数字”和“线性”之外的所有类型的行都显得很奇怪。

function DrawCurrent()
{
   //Set up environment
   var cnvs        = document.getElementById("cnvs");
   cnvs.height     = 500;
   cnvs.width      = 500;
   var cont        = cnvs.getContext("2d");
   var imdt        = cont.getImageData(0,0,500,500);
   //Get  the rest of the dimension and color values that need to be tested
   var canvasXmin       = document.getElementById("CanvasX-min").value;
   var canvasYmin       = document.getElementById("CanvasY-min").value;
   var canvasXmax       = document.getElementById("CanvasX-max").value;
   var canvasYmax       = document.getElementById("CanvasY-max").value;
   var x_minList        = document.querySelectorAll("#LineBoxHolder .x-min");
   var y_minList        = document.querySelectorAll("#LineBoxHolder .y-min");
   var x_maxList        = document.querySelectorAll("#LineBoxHolder .x-max");
   var y_maxList        = document.querySelectorAll("#LineBoxHolder .y-max"); 
   var rgbaValue        = document.querySelectorAll("#LineBoxHolder .lineColor");
   var xyList                      = document.querySelectorAll("#LineBoxHolder .xOry");
   var eqList                      = document.querySelectorAll("#LineBoxHolder .equation");
   var numList                     = document.querySelectorAll("#LineBoxHolder .eqNum");
   //Create variables to be used in graphing (Not all are nessecary, but they make for less repetitive and pointless coding)
   var pseudoBase                  = 0;
   var baseList                    = [];
   var pseudoDependent             = 0;
   var pseudoDependentList         = [];
   var actualDependentList         = [];
   var dependentActual             = 0;
   var xMin                        = 0;
   var xMax                        = 0;
   var yMin                        = 0;
   var yMax                        = 0;
   var eqtn                        = "";
   var numListNum                  = 0;
   var a                           = 0;
   var b                           = 0;
   var c                           = 0;
   var index                       = 0;
       //Graph the lines 
       for (var z9 = 0 ; z9 < eqList.length/*Eqlist has 1 value for each line, so its length is equal to the number of lines*/ ; z9++ )
       {
           //Set values
           xMin            = x_minList[z9].value*1;
           xMax            = x_maxList[z9].value*1;
           yMin            = y_minList[z9].value*1;
           yMax            = y_maxList[z9].value*1;
           eqtn            = eqList[z9].value;
               for ( var z10 = 0 ; z10 < 500 ; z10++ )
               {
                   pseudoBase = canvasXmin*1 + (((Math.abs( canvasXmax - canvasXmin )) * z10)/500);
                   if ( pseudoBase >= xMin && pseudoBase <= xMax )
                   {
                       baseList.push( pseudoBase ); 
                   }
                   else
                   {
                       baseList.push( NaN ); 
                   };

               }
               if ( eqtn == "number" )
               {
                   a = numList[numListNum].value;
                   numListNum++;
                   for ( var z12 = 0 ; z12 < 500 ; z12++)
                   {
                   pseudoDependent = a;
                   if ( pseudoDependent >= yMin && pseudoDependent <= yMax)
                   {
                       pseudoDependentList.push(pseudoDependent);
                   }
                   else
                   {
                       pseudoDependentList.push( NaN);
                   };
                   }
               }
               if ( eqtn == "linear" )
               {
                   a = numList[numListNum].value;
                   numListNum++;
                   b = numList[numListNum].value;
                   numListNum++;
                   for ( var z12 = 0 ; z12 < 500 ; z12++)
                   {
                   pseudoDependent = (a*baseList[z12])*1 + b*1;
                   if ( pseudoDependent >= yMin && pseudoDependent <= yMax )
                   {
                       pseudoDependentList.push(pseudoDependent);
                   }
                   else
                   {
                       pseudoDependentList.push(NaN);
                   };
                   }
               }
               if ( eqtn == "quadratic" )
               {
                   a = numList[numListNum].value;
                   numListNum++;
                   b = numList[numListNum].value;
                   numListNum++;
                   c = numList[numListNum].value;
                   numListNum++;
                   for ( var z12 = 0 ; z12 < 500 ; z12++)
                   {
                       pseudoDependent = (a* Math.pow(baseList[z12],2))+(b*1*baseList[z12])+c*1;
                       if ( pseudoDependent >= yMin && pseudoDependent <= yMax )
                       {
                           pseudoDependentList.push(pseudoDependent);
                       }
                       else
                       {
                           pseudoDependentList.push(NaN);
                       };
                   }
               }
               if ( eqtn == "power" )
               {
                   a = numList[numListNum].value;
                   numListNum++;
                   b = numList[numListNum].value;
                   numListNum++;
                   for ( var z12 = 0 ; z12 < 500 ; z12++)
                   {
                       pseudoDependent = (a* Math.pow(baseList[z12],b));
                       if ( pseudoDependent >= yMin && pseudoDependent <= yMax )
                       {
                           pseudoDependentList.push(pseudoDependent);
                       }
                       else
                       {
                           pseudoDependentList.push(NaN);
                       };
                   }
               }
               if ( eqtn == "exponential" )
               {
                   a = numList[numListNum].value;
                   numListNum++;
                   b = numList[numListNum].value;
                   numListNum++;
                   for ( var z12 = 0 ; z12 < 500 ; z12++)
                   {
                       pseudoDependent = (a* Math.pow(b,baseList[z12]));
                       if ( pseudoDependent >= yMin && pseudoDependent <= yMax )
                       {
                           pseudoDependentList.push(pseudoDependent);
                       }
                       else
                       {
                           pseudoDependentList.push(NaN);
                       };
                   }
               }
               for ( var z13 = 0 ; z13 < 500 ; z13++ )
               {
               dependentActual = 500-(((pseudoDependentList[z13]*1 + (0 - canvasYmin*1))*500)/Math.abs(canvasYmax-canvasYmin));
               actualDependentList.push(dependentActual);
               }
               var storedindex  = 0;
               var currentIndex = 0;
               for ( var z14 = 0 ; z14 < 500 ; z14++)
               {
                   currentIndex = parseInt(Math.round((actualDependentList[z14]*2000) + (4*z14)));
                   console.log(currentIndex + "    " + actualDependentList[z14] + "    " + z14);
                   if (currentIndex >= 0  && currentIndex <= 999997 && pseudoDependentList[z14] != NaN && baseList[z14] != NaN)
                   {
                       environment.data[currentIndex]       = newColorList[z9];
                       environment.data[currentIndex + 1]   = newColorList[z9+1];
                       environment.data[currentIndex + 2]   = newColorList[z9+2];
                       environment.data[currentIndex + 3]   = 255;
                   }
                   if ( z14 > 0 && currentIndex < storedY && pseudoDependentList[z14] != NaN && baseList[z14] != NaN)
                   {
                       for ( var z20 = 1 ; z20 < Math.floor((storedY-currentIndex)/2000) ; z20++ )
                       {
                           index = currentIndex + (z20*2000);
                           if ( index < 999997 && index > 0  )
                           {
                               environment.data[index]      = newColorList[z9];
                               environment.data[index + 1 ] = newColorList[z9+1];
                               environment.data[index + 2 ] = newColorList[z9+2];
                               environment.data[index + 3 ] = 255;
                           }
                       }  
                   }
                   if ( z14 > 0 && currentIndex > storedY && pseudoDependentList[z14] != NaN && baseList[z14] != NaN )
                   {
                       for ( var z15 = 0 ; z15 < Math.floor((currentIndex-storedY)/2000) ; z15++ )
                       {
                           index = currentIndex + (z15*2000);
                           if ( index < 999997 && index > 0 )
                           {
                               environment.data[index]      = newColorList[z9];
                               environment.data[index + 1 ] = newColorList[z9+1];
                               environment.data[index + 2 ] = newColorList[z9+2];
                               environment.data[index + 3 ] = 255;
                           }
                       }
                   }
                   storedY = currentIndex;
               }
       }
   pixelDotter.putImageData( environment , 0 , 0 );
}

此处还有一些示例HTML,以防我感到困惑:

<body onload = drawCurrent()>
 <canvas id = "cnvs" height = "500px" width = "500px">
 </canvas>
<div id = 'LineBoxHolder'>
 <select class = "equation">
  <option value = 'number'>A</option>
  <option value = 'linear' selected = 'selected'>B</option>
  <option value = 'quadratic'>C</option>
  <option value = 'power'>D</option>
  <option value = 'exponential'>E</option>
 </select>
 <!--Linear is selected so there are 2 number inputs-->
 <input type = 'number' class = "eqNum">
 <input type = 'number' class = "eqNum">
 <select class = "equation">
  <option value = 'number'>A</option>
  <option value = 'linear' >B</option>
  <option value = 'quadratic' selected = 'selected'>C</option>
  <option value = 'power'>D</option>
  <option value = 'exponential'>E</option>
 </select>
 <!-- Quadratic is selected so there are 23 number inputs-->
 <input type = 'number' class = "eqNum">
 <input type = 'number' class = "eqNum">
 <input type = 'number' class = "eqNum">
</div>

最后一个快速说明,JavaScript代码假设至少有一行,并且它试图从html获取的所有值都存在于某个地方且有效。

0 个答案:

没有答案