C#沿弧线移动点

时间:2018-11-01 10:44:02

标签: c#

请看这张图片:

我需要用鼠标沿90°的弧线移动两个点之一

请记住,我可以旋转箭头,整个东西也会旋转。

我做了什么:

public override bool HandleMouseMove(MouseEventArgs e)
{      
   double angleRad = 0;
   double new_cx = 0;
   double new_cY = 0;
   double currentAngle = Arrow.Rotation.Angle;
   Point pt = TMEMControl.ScreenToWorld(new Point(e.X, e.Y));
   Point center = TMEMControl.ScreenToWorld(new Point(Arrow.Translation.X, Arrow.Translation.Y));                        
   Point c = new Point(center.X + 25, center.Y);

   angleRad = (-currentAngle) * (Math.PI / 180);
   new_cx = center.X + Math.Cos(angleRad) * 25;
   new_cY = center.Y + Math.Sin(angleRad) * 25;
   c = new Point(new_cx, new_cY);

   Vector CenterPt = new Vector((pt.X-center.X),(pt.Y-center.Y));
   Vector CenterC = new Vector((c.X - center.X),(c.Y - center.Y));
   fieldOfView = Vector.AngleBetween(CenterPt, CenterC);

   if (fieldOfView >= 90) fieldOfView = 90;
   if (fieldOfView <= 0) fieldOfView = 0;

   TMEMControl.Settings.VideoOverlayHelper.FieldOfView = (float)SmartFrame.Basic.BaseAngle.Deg2Rad(fieldOfView*2);

   updateFieldofView = (float)fieldOfView;

   if (updateFieldofView > 87) updateFieldofView = 87;
   if (updateFieldofView < 0) updateFieldofView = 0;
   return true;
}

public void Reset(int id, double x, double y, double angle)
{  
   double angleInRadians = 0;
   Point center = new Point(x + 15, y + 20);
   Point refP = new Point(x + 15, (y - 80));         
   distance = Point.Subtract(refP, center).Length;
   double new_x = 0;
   double new_y = 0;
   ControlPoint cpi = CameraCtrl.getCP(id);
   if (null != cpi)
   {
      switch (id)
      {
      case 0:
         cpi.point = new Point(center.X, center.Y);
         cpi.state = ControlPoint.States.Selectable;
         break;
      case 1:
         cpi.point = new Point(x + 15, (y + 80));             
         angleInRadians = (float)SmartFrame.Basic.BaseAngle.Deg2Rad((angle + (87 - updateFieldofView)));
         new_x = center.X + Math.Cos(-angleInRadians) * distance;
         new_y = center.Y + Math.Sin(-angleInRadians) * distance;              
         cpi.point = new Point(new_x, new_y);               
         cpi.state = ControlPoint.States.Fixed;             
         break;
      case 2:
         cpi.point = new Point(x + 15, (y - 80));
         angleInRadians = (float)SmartFrame.Basic.BaseAngle.Deg2Rad((angle + (180 - (87 - updateFieldofView))));
         new_x = center.X + Math.Cos(-angleInRadians) * distance;
         new_y = center.Y + Math.Sin(-angleInRadians) * distance;
         cpi.point = new Point(new_x, new_y);
         cpi.state = ControlPoint.States.Selectable;
         break;
      }            
   }
}

它可以正常工作90%的问题是,一旦我单击/单击其中一个红点并移动鼠标,该红点始终位于距离鼠标光标几度的位置。我需要使用光标“ Position”来移动它。

为了提供信息,为什么我总是将角度设置为最大87°,是因为我想在箭头和我的两条线之间保持一点距离。

0 个答案:

没有答案