我正在使用旧的Turbo C ++并且是初学者。 这是我正在计划的正在进行的项目的代码。
圆圈随着WSAD键移动 但问题是我希望那个圆圈的喷嘴(中心的一条直线)跟随鼠标的移动,但是我无法弄清楚数学部分将喷嘴的长度限制为30像素。该线继续触摸指针的位置。
我尝试使用距离公式和线方程得到一个具有斜率和线长度的表达式。但问题在于分母中有一个平方根,我认为这会导致问题
此处的大多数代码对于以下问题都是不必要的,因此请忽略
这是相关代码
originx=getmaxx()/2;
originy=getmaxy()/2;
while(doga==0) //main game loop
{ if(kbhit())
op=getch();
if(limiter>10) //limiter is used to restrict the motion of the circle for a limited // time
{ op=0;limiter=0;} // otherwise the cirlce moves in that direction unless another //key is pressed
//movement of the circle
if(op==72)
{ originy--; limiter++;}
if(op==80)
{originy++; limiter++;}
if(op==75)
{ originx--; limiter++ ;}
if(op==77)
{ originx++; limiter++; }
circle(originx,originy,5);
mouseposi(x,y,cl);
printf(" %d %d",x,y);
printf("\b\b\b\b\b\b\b\b");
m=sloper(originx,originy,x,y);
line(originx,originy,80/sqrt(1+m*m),m*80/sqrt(1+m*m)); //THIS LINE IS WHERE THE PROBLEM IS
delay(30);
cleardevice();
if(op==49) //for exiting
doga=2;
}
}
答案 0 :(得分:3)
让(x,y)
成为你追求的点,(ox, oy)
成为你的起源,(mx, my)
是你的鼠标位置。
从原点到鼠标的矢量是(dx, dy) = (mx - ox, my - oy)
。
鼠标与原点之间的距离与该矢量的范数相同:
distance = sqrt(dx * dx + dy * dy);
规范化(缩放)矢量以获得长度为1(“单位长度”)的新矢量
nx = dx / distance;
ny = dy / distance;
最后我们可以按照所需的长度缩放这些坐标(记住要添加原点)
x = ox + length * nx;
y = oy + length * ny;