Javascript 绘制贝塞尔曲线,但画布保持空白

Javascript 绘制贝塞尔曲线,但画布保持空白,javascript,canvas,bezier,Javascript,Canvas,Bezier,这是我的密码。我是JavaScript新手,所以我很难找到我的代码有什么问题。我尝试向函数的各个部分添加警报,以检查哪些部分可以正常工作,但没有成功 <!DOCTYPE html> <html> <head> <script> function BEZIER() { var X = ["0,0,0,0,0"]; var Y = ["0,0,0,0,0"]; X[0] = document.getElementById("X0

这是我的密码。我是JavaScript新手,所以我很难找到我的代码有什么问题。我尝试向函数的各个部分添加警报,以检查哪些部分可以正常工作,但没有成功

<!DOCTYPE html>
<html>
<head>
<script>
function BEZIER() {
    var X = ["0,0,0,0,0"];
    var Y = ["0,0,0,0,0"];
    X[0] = document.getElementById("X0");
    Y[0] = document.getElementById("Y0");
    X[0] = document.getElementById("X1");
    Y[0] = document.getElementById("Y1");
    X[0] = document.getElementById("X2");
    Y[0] = document.getElementById("Y2");
    X[0] = document.getElementById("X3");
    Y[0] = document.getElementById("Y3");
    X[0] = document.getElementById("X4");
    Y[0] = document.getElementById("Y4");
    var A;
    var B;
    var T = 0;
    while (T <= 1) {
        var i = 0;
        while (i < 5) {
            A[i] = X[i];
            B[i] = Y[i];
            i++;
        }
        i = 0;
        var j = 5;
        while (j > 1) {
            i = 0;
            while (i < j) {
                A[i] = A[i] * (1 - T) + A[i + 1] * T;
                B[i] = B[i] * (1 - T) + B[i + 1] * T;
                i++;
            }
            j--;
        }
        T = T + 0.1;
        var S = document.getElementById("a");
        var ctx = S.getContext("2d");
        ctx.beginPath();
        ctx.arc(A[0], B[0], 10, 0, 2 * Math.PI);
        ctx.fill();
    }
}
</script>
</head>
<body>
    <p>Introduceti coordonatele cu valori intre 0 si 800</p> <br>
    <form>punctul 0: X=<input type="number" id="X0" name="X0" >, Y=<input type="number" id="Y0" name="Y0" ><br></form>  
    <form>punctul 1: X=<input type="number" id="X1" name="X1" >, Y=<input type="number" id="Y1" name="Y1" ><br></form>
    <form>punctul 2: X=<input type="number" id="X2" name="X2" >, Y=<input type="number" id="Y2" name="Y2" ><br></form>
    <form>punctul 3: X=<input type="number" id="X3" name="X3" >, Y=<input type="number" id="Y3" name="Y3" ><br></form>
    <form>punctul 4: X=<input type="number" id="X4" name="X4" >, Y=<input type="number" id="Y4" name="Y4" ><br></form>   
    <button onclick="BEZIER()">!DESENATI!</button><br><br>
     <canvas id="a" width="800" height="800" style="border:1px solid #000000;">
    </canvas>

</body>

函数BEZIER(){
变量X=[“0,0,0,0,0”];
变量Y=[“0,0,0,0,0”];
X[0]=document.getElementById(“X0”);
Y[0]=document.getElementById(“Y0”);
X[0]=document.getElementById(“X1”);
Y[0]=document.getElementById(“Y1”);
X[0]=document.getElementById(“X2”);
Y[0]=document.getElementById(“Y2”);
X[0]=document.getElementById(“X3”);
Y[0]=document.getElementById(“Y3”);
X[0]=document.getElementById(“X4”);
Y[0]=document.getElementById(“Y4”);
var A;
var B;
var T=0;
while(t1){
i=0;
而(i
点1:X=,Y=
点2:X=,Y=
点3:X=,Y=
点4:X=,Y=
!德塞纳蒂


代码中有许多语法错误,这就是它不起任何作用的原因

首先,在循环中,使用变量A和B,但不初始化它们。尝试
var A=[];var B=[]

此外,如果您想获得
输入
标记的值,您必须执行以下操作

document.getElementById("X0").value
而不是

document.getElementById("X0")
但真正奇怪的是,你总是给X和Y的相同元素赋值:

X[0] = ...something...
X[0] = ...something else...
另外,当您创建X和Y数组时,实际上只是创建了以单个字符串作为元素的数组。。。请尝试以下方法:

var X = [0,0,0,0,0];
var Y = [0,0,0,0,0]; // without the "

但正如有人已经说过的,我建议您在尝试编写对您来说太难的代码之前,阅读更多有关Javascript语法的内容。从基础开始,就像每个人开始使用新语言编程时一样…

我强烈建议使用console.log()和Firebug或Chrome Developer工具,而不仅仅是用javascript发出警报来调试代码我建议阅读MDN教程,例如,在作为早期的js项目在画布上绘制曲线之前,为什么不使用内置的bezierCurveTo()方法呢?我正试图从头开始做这件事。我懂数学,但我的Js技能还处于初级水平