如何截断2点之间的一条线?

时间:2013-03-24 00:48:50

标签: java math vector java-canvas

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

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

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

如果该行从上到下,我必须在起点S上应用(0, +10),在结束点上应用(0, -10)。当线在对角线中穿过坐标空间时,让复杂变得复杂。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 查找x和y位移
  2. 找到角度theta
  3. 创建置换向量
  4. 从您的积分中添加或取消
  5. 如果这不起作用,请告诉我。

    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];