c++ - 如果我有一条从点 x1、y1 到 x2、y2 的线,我怎样才能从点 x2、y2 以 45 度角绘制 2 条线来制作箭头?

标签 c++ math geometry

我想要从用户单击鼠标的点到他将鼠标拖动到的点绘制一个箭头。基线是下面代码中绘制的第一条线。现在我想要 2 条距离 d 线的短线以 45 度从该点出来以创建指向当前鼠标位置的箭头。这两条线是绘制的第二条线。 drawLine() 从第一个 2 个值的点到第二个 2 个值的点画一条线。我想不通的是如何计算下面代码中的 arrowLine 变量的坐标。

    double deltaX = mousePosX - mouseOnDownX;
    double deltaY = mousePosY - mouseOnDownY;
    double distance = sqrt(pow(deltaX, 2) + pow(deltaY, 2));
    double angle = atan(deltaY / deltaX) * 180 / PI;
    int arrowLineLength = 20;
    int arrowLineAngle = 45;
    screen->drawLine(mousePosX, mousePosY, mouseOnDownX,mouseOnDownY);
    screen->drawLine(mousePosX, mousePosY, arrowLine1x,arrowLine1y);
    screen->drawLine(mousePosX, mousePosY, arrowLine2x,arrowLine2y);

编辑:澄清一下,mouseOnDownX 和 mouseOnDownY 是用户最初按下鼠标按钮时鼠标的坐标。 mousePosX 和 mousePosY 是鼠标在其当前位置的坐标,是箭头线应该出现的点。

最佳答案

坐标是:

arrowLine1x=x+d*cos(atan(deltaY/deltaX)+45);
arrowLine1y=y+d*sin(atan(deltaY/deltaX)+45);
arrowLine2x=x+d*cos(atan(deltaY/deltaX)-45);
arrowLine2y=y+d*sin(atan(deltaY/deltaX)-45);

关于c++ - 如果我有一条从点 x1、y1 到 x2、y2 的线,我怎样才能从点 x2、y2 以 45 度角绘制 2 条线来制作箭头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152150/

相关文章:

math - 辛普森悖论在 AB 测试中意味着什么?

javascript - 如何计算混合费用?

algorithm - "false 3D"棱镜墙的渲染顺序

c++ - 透明椭圆

c++ - stringstream::ignore(INT_MAX, '\n') 导致流失败

c++ - ArUco 姿态估计中的不稳定值

c++ - fmodl - long double 中的模数

找到包围一个点的线的算法

c++ - #ifdef 和#endif 中无法访问的代码是否在编译/链接期间被删除?

c++ - 用 C++ 创建 GUI