0

我正在使用旧的 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;
    }


   } 
4

1 回答 1

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;
于 2012-06-19T07:42:10.210 回答