javascript - 需要找到向网格上的某物移动的方程式

标签 javascript tracking

好吧,我写了一个脚本,让你四处移动,而不是在由一堆放在一起的“x”字母组成的网格上。所以你知道它是什么样子的,这是制作它的 JS:

function generate_page() {
    var x = 0;
    var y = 0;
    var lines = 20;
    var output;
    while (x <= lines) {
        while( y <= lines*2){
            if (x == 0 && y == 1) {
                output = "<span id='x" + x + "_" + y + "' style='background-color: red'>o</span>";
            } else if (x == 3 && y == 5) {
                output = "<span id='x" + x + "_" + y + "' style='background-color: green'>z</span>";
            } else {
                output = ("<span id='x" + x + "_" + y + "'>x</span>");
            }
            $('#board').append(output);
            y++;
        }
        y = 0;
        x++;
        $('#board').append('<br />');
    }
}

现在,我在棋盘上有一个绿色 Angular 色,我正在尝试对其进行编程以使其朝向您控制的红色 Angular 色。我已经计算出北、南、东和西功能。然而,就我的生活而言,我无法找出使一个走向另一个的小算法。我尝试了以下方法,但它无论如何都不起作用。谁能帮我想出一种让一个 Angular 色追踪另一个 Angular 色的方法?这是我失败的尝试:

function moveGreen() {
    var x_distance = currentX_green - currentX_red;
    var y_distance = currentY_green - currentY_red;
    var larger;
    if (x_distance > y_distance) {
        larger = 'x';
    } else if (y_distance > x_distance) {
        larger = 'y';
    } else {
        larger = 'o';
    }
    if (larger == 'x') {
        if (x_distance > 0){
            north('green');
        } else {
            south('green');
        }
    } else if (larger == 'y'){
        if (y_distance > 0) {
            west('green');
        } else {
            east('green');
        }
    } else if (larger == 'o'){
        if (y_distance > 0){
            east();
        } else if (y_distance == 0) {
            if (x_distance > 0) {
                north();
            } else {
                south();
            }
        } else {
            west();
        }
    }
}

编辑:Here是当前程序。忽略红色东西上的绿色 Action 。

编辑 2:好的,我更新了西部和没有绿色的东西的问题。这是新代码:

function moveGreen() {
    var x_distance = currentX_green - currentX_red;
    var y_distance = currentY_green - currentY_red;
    var larger;
    if (Math.abs(x_distance) > Math.abs(y_distance)) {
        larger = 'x';
    } else if (Math.abs(y_distance) > Math.abs(x_distance)) {
        larger = 'y';
    } else {
        larger = 'o';
    }
    if (larger == 'x') {
        if (x_distance > 0){
            north('green');
        } else {
            south('green');
        }
    } else if (larger == 'y'){
        if (y_distance > 0) {
            west('green');
        } else {
            east('green');
        }
    } else if (larger == 'o'){
        if (y_distance > 0){
            east('green');
        } else if (y_distance == 0) {
            if (x_distance > 0) {
                north('green');
            } else if (x_distance < 0){
                south('green');
            }
        } else {
            west('green');
        }
    }
}

最佳答案

一个明显的问题是您需要检查顶部附近的绝对值。

代替

if (x_distance > y_distance) {
    larger = 'x';
} else if (y_distance > x_distance) {

你需要

if (Math.abs(x_distance) > Math.abs(y_distance)) {
    larger = 'x';
} else if (Math.abs(y_distance) > Math.abs(x_distance)) {

因为您仍然想要“最大”,即使它是负数。

更新 现在它在 x=y 处停止。查看代码,对于这种情况,在 east 等参数中没有“绿色”。

更新 好吧,现在它在对 Angular 线上时出错了,所以我猜东/西是“o”情况下的错误方向(事实上,它们与“y”大小写)。现在看起来好多了!

关于javascript - 需要找到向网格上的某物移动的方程式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026224/

相关文章:

opencv - 如何使用 EMGU CV 检测正方形/矩形或其他形状?

email - 群发电子邮件跟踪

javascript - 修改指令中的模板(动态添加另一个指令)

javascript - Bootstrap 多选下拉列表从 optgroup 中取消选择相同值的选项

java - 如何在 Android 中链接 GPS 追踪器?

ios - 如何使用 iOS 版 Google Analytics SDK 跟踪推荐?

javascript - Chrome 扩展程序/应用程序设置 Javascript

javascript - Internet Explorer中的execCommand使用USC-2 Little endian编码保存csv文件,如何以UTF-8格式保存?

javascript - Sweet Alert 2 提交前确认

web-services - 如何获取完整的跟踪信息(Fedex Web 服务)?