0

我想在画布上画一条线。因此,我使用用户两次单击来定义起点S和终点E

ctx.moveTo(sx, sy);
ctx.lineTo(ex, ey);

我还想在直线的两侧减去一个静态偏移量,例如static int offset = 10; 我的问题是:我怎么知道我必须添加或减去偏移量的方向(北、东、南、西)?

如果这条线从上到下,我必须(0, +10)在起点 S 和(0, -10)终点应用。当直线穿过坐标空间对角线时会变得更复杂。

可能这可能是一个“简单”的数学问题,但我缺少正确的关键字来找到任何解决方案。

4

1 回答 1

0

你只需要使用一些基本的数学。

  1. 找到 x 和 y 位移
  2. 找到角度 theta
  3. 创建位移矢量
  4. 从您的观点中添加或获取此信息

如果这不起作用,请告诉我。

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];
于 2013-03-24T01:31:54.013 回答