我想在画布上画一条线。因此,我使用用户的两次点击来定义起点S
和终点E
。
ctx.moveTo(sx, sy);
ctx.lineTo(ex, ey);
我还想在线的两边减去静态偏移量,例如static int offset = 10;
我的问题是:我如何知道我必须添加或减去偏移量的方向(北,东,南,西)?
如果该行从上到下,我必须在起点S上应用(0, +10)
,在结束点上应用(0, -10)
。当线在对角线中穿过坐标空间时,让复杂变得复杂。
可能这可能是一个“简单”的数学问题,但我找不到合适的关键字来找到任何解决方案。
答案 0 :(得分:0)
你只需要使用一些基本的数学。
如果这不起作用,请告诉我。
int offset = 10;
int[] point1 = {15, 25}; //start point
int[] point2 = {42, 37}; //end point
int xDisplacement = point2[0] - point1[0];
int yDisplacement = point2[1] - point1[1];
double theta = Math.toDegrees(Math.atan2(yDisplacement, xDisplacement));
double[] diplacementVector = {offset*Math.cos(theta), offset*Math.sin(theta)};
point1[0] += diplacementVector[0];
point1[1] += diplacementVector[1];
point2[0] -= diplacementVector[0];
point2[1] -= diplacementVector[1];