javascript - Canvas 直线 ctx.lineTo 的轨迹(y Angular )和(x 到所需长度)

标签 javascript canvas html5-canvas

我正在使用普通的 html/javascript Canvas (无库)。我有一种从两点计算 Angular 方法,我的理论是,我获取 Angular 并通过循环所需的水平距离 (x) 并对该 Angular 进行一些计算,使其保持笔直 (y),在该 Angular 上画一条线,我只能在谷歌上找到有关复杂曲线和圆形线的内容。在每个循环中,我都会自行* Angular 吗?我不太擅长可视化数字

var point1 = {
    x: 20,
    y: 20
};

var point2 = {
    x: 40,
    y: 40
};

// angle method 1
var radians = Math.atan2(point2.y - point1.y, pv2.x - point1.x);

// angle method2
var degrees = Math.atan2(point2.y - point1.y, point2.x - point1.x) * 180 / Math.PI;

更新:MarkE 回答后,事情看起来颠倒了,但好多了......

光线直线显示了两点的波浪线 Angular ,但 Angular 有些翻转......我正在努力理解这一点

enter image description here

看起来我忘记了犯罪...

最佳答案

您可以使用三 Angular 函数计算沿包括点 1 和点 2 在内的直线指定长度处的 x、y。

var dx=point2.x-point1.x;
var dy=point2.y-point1.y;
var radianAngle=Math.atan2(dy,dx);
var desiredLength=150;

var x=point1.x+desiredLength*Math.cos(radianAngle);
var y=point1.y+desiredLength*Math.sin(radianAngle);

示例代码和演示:http://jsfiddle.net/m1erickson/sztC8/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    ctx.strokeStyle="red";

    var point1 = {
        x: 20,
        y: 20
    };

    var point2 = {
        x: 40,
        y: 40
    };

    var PI2=Math.PI*2;

    var dx=point2.x-point1.x;
    var dy=point2.y-point1.y;
    var radianAngle=Math.atan2(dy,dx);
    var desiredLength=150;

    var x=point1.x+desiredLength*Math.cos(radianAngle);
    var y=point1.y+desiredLength*Math.sin(radianAngle);


    ctx.beginPath();
    ctx.arc(point1.x,point1.y,5,0,PI2);
    ctx.closePath();
    ctx.arc(point2.x,point2.y,5,0,PI2);
    ctx.closePath();
    ctx.fill();

    ctx.beginPath();
    ctx.moveTo(point1.x,point1.y);
    ctx.lineTo(x,y);
    ctx.stroke();

}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

关于javascript - Canvas 直线 ctx.lineTo 的轨迹(y Angular )和(x 到所需长度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035738/

相关文章:

javascript - 在 Promise 中调用函数

javascript - 通过类名获取祖先

javascript - 根据 y 轴位置注释流程图

javascript - 在简单的碰撞检测算法方面需要帮助

javascript - 如何让 Canvas 在不剪切的情况下正确调整大小..特定脚本

javascript - 使用纯 JavaScript,是否有一种简单的方法可以将事件监听器附加到类?

javascript - CSS3动画-变换: scale3D on firefox 45. 0

javascript - 如何创建具有绝对坐标的响应式 Canvas ?

javascript - 单击鼠标在 Canvas 中绘制一个圆圈

javascript - Webgl 未捕获引用错误 : createShaderFromScriptElement is not defined