Java 如何截断两点之间的直线?

Java 如何截断两点之间的直线?,java,math,vector,java-canvas,Java,Math,Vector,Java Canvas,我想在画布上画一条线。因此,我使用用户的两次单击来定义起点S和终点E ctx.moveTo(sx, sy); ctx.lineTo(ex, ey); 我还想在行的两侧减去一个静态偏移量,例如static int offset=10 我的问题是:我如何知道我必须添加或减去偏移的方向(北、东、南、西) 如果行从上到下,我必须在起点S上应用(0,+10),在终点应用(0,-10)。当直线穿过坐标空间呈对角线时,会变得更加复杂 这可能是一个“简单”的数学问题,但我缺少找到任何解决方案的正确关键字。你只

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

ctx.moveTo(sx, sy);
ctx.lineTo(ex, ey);
我还想在行的两侧减去一个静态偏移量,例如
static int offset=10
我的问题是:我如何知道我必须添加或减去偏移的方向(北、东、南、西)

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


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

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

  • 求x和y位移
  • 求θ角
  • 创建置换向量
  • 从您的观点中添加或获取此信息
  • 如果这不起作用,请告诉我

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

    我明白,这让我走了!