Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-未捕获引用错误:未定义绘制_Javascript_Jquery - Fatal编程技术网

javascript-未捕获引用错误:未定义绘制

javascript-未捕获引用错误:未定义绘制,javascript,jquery,Javascript,Jquery,我在互联网上查找Graham扫描算法的代码,该算法在平面上查找有限点集的凸包,java脚本中有一些错误,但没有找到所有错误的正确答案 UPD:所以我产生了64行代码,所有的eror都消失了,但是用来画线的onclick函数还不起作用 这是一个html文件 <html> <head> <title>Graham Scan</title> <meta charset="utf-8"/

我在互联网上查找Graham扫描算法的代码,该算法在平面上查找有限点集的凸包,java脚本中有一些错误,但没有找到所有错误的正确答案

UPD:所以我产生了64行代码,所有的eror都消失了,但是用来画线的onclick函数还不起作用

这是一个html文件

<html>
        <head>
            <title>Graham Scan</title>
            <meta charset="utf-8"/>
            <script src="main.js"></script>
        </head>
        <body>  
            <form>
              <label>Задайте точки (через запятую):</label>
              <input id="points" value="10, 20, 60, 160, 110, 20, -60, 80, 70, 140" size="150" type="text" /> 
              <input type="button" onclick="getPoints()" value="Построить оболочку" /><br />
            </form>
        </body>    
    </html>

格雷厄姆扫描
Задайте точки (через запятую):

main.js

/**
 * создает канвас
 */
function create_canvas() {
    var canvas_html = document.createElement('canvas');
    canvas_html.id = "canvas";
    canvas_html.width = 1500;
    canvas_html.height = 800;

    document.body.appendChild(canvas_html);

    return canvas_html.getContext('2d');
}

/**
 * рисует координатные оси  
 */
function drawCoordLines() {
    canvas.beginPath();
    canvas.moveTo(300, 10);
    canvas.lineTo(300, 400);
    canvas.moveTo(10, 220);
    canvas.lineTo(600, 220);
    canvas.stroke();
    canvas.closePath();
}

/**
 * рисует оболочку
 */
function drawHull() {
    canvas.beginPath();
    canvas.moveTo(300 + points[ h[0] ].x, 220 - points[ h[0] ].y);
    for(var i=1; i<h.length; i++){
        canvas.lineTo(300 + points[ h[i] ].x, 220 - points[ h[i] ].y);
    }

    canvas.closePath();    
    canvas.stroke();    
}

/**
 * рисует точки
 */
function drawPoints() {

    canvas.fillStyle = '#00f';
    for(var i=0; i<points.length; i++){
        canvas.beginPath();
        canvas.arc(300 + points[i].x, 220 - points[i].y, 3, 0, Math.PI * 2); // рисует точку
        canvas.closePath();
        canvas.fill(); 
    }    


}

/**
 * обновляет и перерисовывает канвас
 */
function update() {
    canvas.clearRect(0, 0, 1500, 800); // очищаем канвас
    drawCoordLines();    
  //  draw();
    drawPoints();
}

/**
 * считывает точки из формы
 */
function getPoints() {
    // получаем строку введенную в форму, и записываем в массив, разбив ее по запятой
    var coords = pointsV.value.split(", ");
    var i = 0;
    var j = 0;
    points = [];
    ch = [];
    while (i < coords.length) {
        points[j++] = {
            'x': parseInt(coords[i++]),
            'y': parseInt(coords[i++])
        }
        ch.push(j-1);
    }    
    graham();
}

/**
 * возращает векторное произведение
 */
function classify(vector, x1, y1) {
    return pr = (vector.x2 - vector.x1) * (y1 - vector.y1) - (vector.y2 - vector.y1) * (x1 - vector.x1);
}

/**
 * Выполняет поиск Грэхема и заполняет массив h, в котором будут перечислены точки, входящие в оболочку
 */
function graham() {
    var minI = 0; //номер нижней левой точки
    var min = points[0].x;
    // ищем нижнюю левую точку
    for (var i = 1; i < points.length; i++) {
        if (points[i].x < min) {
            min = points[i].x;
            minI = i;
        }
    }
    // делаем нижнюю левую точку активной
    ch[0] = minI;
    ch[minI] = 0;

    // сортируем вершины в порядке "левизны"
    for (var i = 1; i < ch.length - 1; i++) {
        for (var j = i + 1; j < ch.length; j++) {
            var cl = classify({
                'x1': points[ ch[0] ].x,
                'y1': points[ ch[0] ].y,
                'x2': points[ ch[i] ].x,
                'y2': points[ ch[i] ].y
            }, points[ ch[j] ].x, points[ ch[j] ].y) // функция classify считает векторное произведение.            

            // если векторное произведение меньше 0, следовательно вершина j левее вершины i.Меняем их местами
            if (cl < 0) {
                temp = ch[i];
                ch[i] = ch[j];
                ch[j] = temp;
            }
        }
    }   

    //записываем в стек вершины, которые точно входят в оболочку
    h = [];
    h[0] = ch[0];
    h[1] = ch[1]; 


    for (var i = 2; i < ch.length; i++) {
        while (classify({
            'x1': points[ h[h.length - 2] ].x,
            'y1': points[ h[h.length - 2] ].y,
            'x2': points[ h[h.length - 1] ].x,
            'y2': points[ h[h.length - 1] ].y
        }, points[ ch[i] ].x, points[ ch[i] ].y) < 0) {            
            h.pop(); // пока встречается правый поворот, убираем точку из оболочки
        }
        h.push(ch[i]); // добавляем новую точку в оболочку
    }

    // обновляем канвас
    update();
}

/**
 * выполняется когда страница будет полностью загружена в браузер
 */
window.onload = function() {
    canvas = create_canvas();

    // массив точек, из которых строим выпуклую оболочку
    points = [{
            'x': 10,
            'y': 20
        }, {
            'x': 60,
            'y': 160
        }, {
            'x': 110,
            'y': 20
        }, {
            'x': -60,
            'y': 80
        },
        {
            'x': 70,
            'y': 140
        }];

    // массив номеров точек, потребуется для алгоритма Грэхема   
    ch = [0, 1, 2, 3, 4];

    // искомая оболочка, будет заполнена функцией graham
    h = []

    // получаем форму ввода
    pointsV = document.getElementById('points');
    graham();
}
/**
* создает канвас
*/
函数create_canvas(){
var canvas_html=document.createElement('canvas');
canvas_html.id=“canvas”;
canvas_html.width=1500;
canvas_html.height=800;
document.body.appendChild(canvas_html);
返回canvas_html.getContext('2d');
}
/**
* рисует координатные оси  
*/
函数drawCoordLines(){
canvas.beginPath();
canvas.moveTo(300,10);
canvas.lineTo(300400);
canvas.moveTo(10220);
canvas.lineTo(600220);
canvas.stroke();
canvas.closePath();
}
/**
* рисует оболочку
*/
函数drawHull(){
canvas.beginPath();
canvas.moveTo(300+点[h[0]].x,220-点[h[0]].y);

对于(var i=1;imain.js中不存在
draw()
函数。您有
drawCoordLines()
drawHull()
,但不仅仅是
draw()
。错误消息非常明确,甚至给您提供了要查看的行…

draw未定义
,因为
draw
未定义(您的代码中没有此类函数
draw
)。您没有
函数draw()
代码中的任何地方。你有
drawCoordLines
drawHull
,和
drawPoints
。好的。如果画布上出现代码aaand…point,我就删除了那一行,但只要单击应该画线的函数就不起作用了。这不是答案,应该是一条注释,我们两个人已经发布了。@Barmar当我开始键入我的答案时没有评论,我没有足够的代表发表评论,因为像你这样的人拒绝了那些只是想帮助我的代表。发布不恰当的答案不是获得代表的方式,你需要能够发表评论。如果没有评论,请稍等。你真的认为你是只有一个人知道问题是什么?这怎么是一个不恰当的答案?他想知道错误的意思,我告诉了他。我不是在寻找代表,我只是在等待我自己的问题得到回答的时候,通过回答一些简单的问题来帮助人们。一个恰当的答案应该解释如何解决问题,而不仅仅是解释错误。