我是Java语言的新手,所以很抱歉,如果我的错误显而易见!我正在尝试使用规范形式方程式绘制椭圆。

<html>
    <body>
        <canvas id="myCanvas" width="400" height="400" style="border:1px solid #000000;">
        </canvas>
        <script language="javaScript">
        var c=document.getElementById("myCanvas");
        var ctx=c.getContext("2d");

        var HEIGHT = ctx.height;
        var WIDTH = ctx.width;
        function transform(p){
            return [ WIDTH/2 + p[0], HEIGHT/2 - p[1]];
        }

        var a = 70; //length parallel to x axis
        var b = 30; //length parallel to y axis
        var h = 150 - WIDTH/2; //when tranformed this gives the pixel 150
        var k = -HEIGHT/2 - 100; //when transformed this gives pixel 100

        function y(x){
            return b*Math.sqrt(1 - Math.pow((x - h)/a, 2)) + k;
        }

        var dx = a/2/100 ; //each quadrant is broken into 100 segments
        var pOld = [h - a/2, k]; //starting point
        var pNew = [0,0];
        var x1 = 0;
        var x2 = 0;
        var y1 = 0;
        var y2 = 0;
        var temp = [0,0];

        for (var i = 0; i < 100; ++i){

            pNew[0] = pOld[0] + dx;
            pNew[1] = y(pNew[0]);

            temp = transform(pOld);
            x1 = temp[0]; y1 = temp[1];
            temp = transform(pNew);
            x2 = temp[0]; y2 = temp[1];

            ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); //x1, y1 -> x2, y2
            ctx.moveTo(x1, -y1); ctx.lineTo(x2, -y2); //x1,-y1 -> x2,-y2
            ctx.moveTo(-x1, y1); ctx.lineTo(-x2, y2); //-x1,y1 -> -x2, y2
            ctx.moveTo(-x1, -y1); ctx.lineTo(-x2, -y2); //-x1,-y1 -> -x2,-y2

            pOld = pNew;
        }

        ctx.lineWidth = 2;
        ctx.strokeStyle = "#232323";
        ctx.stroke();

        </script>
    </body>
</html>

最佳答案

您的值为NaN(非数字)。更改这些行:

var HEIGHT = ctx.height;
var WIDTH = ctx.width;




var HEIGHT = c.height;
var WIDTH = c.width;


您会得到正确的号码。但是,您的y值在画布区域之外-如果您用console.log记录值,则将看到此值。总体上似乎有一些数学问题,我在这里没有解决,但是相对于画布,您应该再走一步。

关于javascript - 我在 Canvas 绘图中做错了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21213847/

10-12 00:06