我想要从用户单击鼠标的点到他将鼠标拖动到的点绘制一个箭头。基线是下面代码中绘制的第一条线。现在我想要 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/