条件: 1、从屏幕上通过鼠标随机输入一条线,至少3个线段。 
2、通过对话框输入2个垂距(A和B)。 
结果: 生成与输入线平行的二条线(两侧各一条) 与输入线的距离分别为已输入的垂距。、

各位大侠最好能给个源代码。小弟在此叩谢了

解决方案 »

  1.   

    我才发了2个帖子、都是一个小时内发的。都还没结贴啊、、、题目1: 生成平行线
    类型: 招聘应试题目/试用期考核题/实习期练习题
    等级: C
    语言: 自选
    条件: 1、从屏幕上通过鼠标随机输入一条线,至少3个线段。(如下图 黑色 部分)
    2、通过对话框输入2个垂距(A和B)。
    结果: 生成与输入线平行的二条线(如下图 红色和蓝色 部分);
    与输入线的距离分别为已输入的垂距。
    示例:
      

  2.   

    private Point downPoint = Point.Empty; // 鼠标按下的坐标  private Point movePoint = Point.Empty; // 鼠标移动的坐标  private double lineSpace = 12.0f; // 线条之间的距离  private Point offsetPointA = Point.Empty; // 偏移坐标A  private Point offsetPointB = Point.Empty; // 偏移坐标B    private double PointToAngle(Point AOrigin, Point APoint)  {      if (APoint.X == AOrigin.X)          if (APoint.Y > AOrigin.Y)              return Math.PI * 0.5f;          else return Math.PI * 1.5f;      else if (APoint.Y == AOrigin.Y)          if (APoint.X > AOrigin.X)              return 0;          else return Math.PI;      else      {          double Result = Math.Atan((double)(AOrigin.Y - APoint.Y) /              (AOrigin.X - APoint.X));          if ((APoint.X  < AOrigin.X) && (APoint.Y > AOrigin.Y))              return Result + Math.PI;          else if ((APoint.X  < AOrigin.X) && (APoint.Y  < AOrigin.Y))              return Result + Math.PI;          else if ((APoint.X > AOrigin.X) && (APoint.Y  < AOrigin.Y))              return Result + 2 * Math.PI;          else return Result;      }  } /* PointToAngle */    private void Form1_MouseDown(object sender, MouseEventArgs e)  {      downPoint = e.Location;  }    private void Form1_MouseMove(object sender, MouseEventArgs e)  {            if (downPoint != Point.Empty)      {          Graphics vGraphics = CreateGraphics();          if (movePoint != Point.Empty)          {              vGraphics.DrawLine(new Pen(BackColor), offsetPointA,                  new Point(movePoint.X + offsetPointA.X - downPoint.X,                  movePoint.Y + offsetPointA.Y - downPoint.Y));              vGraphics.DrawLine(new Pen(BackColor), offsetPointB,                  new Point(movePoint.X + offsetPointB.X - downPoint.X,                  movePoint.Y + offsetPointB.Y - downPoint.Y));              vGraphics.DrawLine(new Pen(BackColor), downPoint, movePoint);          }          movePoint = e.Location;          double angle = PointToAngle(downPoint, movePoint);          offsetPointA.X = (int)(Math.Cos(angle + 0.5f * Math.PI) * lineSpace +               downPoint.X);          offsetPointA.Y = (int)(Math.Sin(angle + 0.5f * Math.PI) * lineSpace +               downPoint.Y);          offsetPointB.X = (int)(Math.Cos(angle - 0.5f * Math.PI) * lineSpace +               downPoint.X);          offsetPointB.Y = (int)(Math.Sin(angle - 0.5f * Math.PI) * lineSpace +               downPoint.Y);                    vGraphics.DrawLine(Pens.Red, offsetPointA,               new Point(movePoint.X + offsetPointA.X - downPoint.X,              movePoint.Y + offsetPointA.Y - downPoint.Y));          vGraphics.DrawLine(Pens.Red, offsetPointB,              new Point(movePoint.X + offsetPointB.X - downPoint.X,              movePoint.Y + offsetPointB.Y - downPoint.Y));            vGraphics.DrawLine(Pens.Blue, downPoint, movePoint);          vGraphics.Dispose();      }  }    private void Form1_MouseUp(object sender, MouseEventArgs e)  {      downPoint = Point.Empty;  } 
      

  3.   

    好难画成你那个样子的。
    我只能做到画平行线。public partial class UserControl1 : UserControl {
            const int POINTCOUNT = 3;
            public UserControl1() {
                InitializeComponent();            Init();
            }        int _verticalDistance1 = 30;
            /// <summary>
            /// 垂距1
            /// </summary>
            public int VerticalDistance1 {
                get { return _verticalDistance1; }
                set { _verticalDistance1 = value; }
            }        int _verticalDistance2 = 10;
            /// <summary>
            /// 垂距2
            /// </summary>
            public int VerticalDistance2 {
                get { return _verticalDistance2; }
                set { _verticalDistance2 = value; }
            }        List<Point> _pointList;        void Init() {
                _pointList = new List<Point>();
            }        protected override void OnPaint(PaintEventArgs e) {
                Graphics g = e.Graphics;            for (int i = 0; i < _pointList.Count - 1; i++) {
                    Point item1 = _pointList[i];
                    Point item2 = _pointList[i + 1];                g.DrawLine(new Pen(Color.Red, 3), item1, item2);                double aaa = Math.Sqrt(Math.Pow(item1.X - item2.X, 2) + Math.Pow(item1.Y - item2.Y, 2));                int x = (int)(_verticalDistance1 * Math.Abs(item1.Y - item2.Y) / aaa);
                    int y = (int)(_verticalDistance1 * Math.Abs(item1.X - item2.X) / aaa);                g.DrawLine(new Pen(Color.Blue, 3), item1.X + x, item1.Y + y, item2.X + x, item2.Y + y);
                }
                base.OnPaint(e);
            }        protected override void OnMouseDown(MouseEventArgs e) {
                if (_pointList.Count > POINTCOUNT) {
                    _pointList.Clear();
                    goto PAINT;
                }            Point temp = _pointList.SingleOrDefault(f => f.X == e.X && f.Y == e.Y);
                if (temp.X != 0) {
                    goto PAINT;
                }
                _pointList.Add(e.Location);            PAINT:
                Invalidate();            base.OnMouseDown(e);
            }        protected override void OnMouseUp(MouseEventArgs e) {            Point temp = _pointList.SingleOrDefault(f => f.X == e.X && f.Y == e.Y);
                if (temp.X != 0) {
                    goto PAINT;
                }            _pointList.Add(e.Location);            PAINT:
                base.OnMouseUp(e);
            }    }
      

  4.   

    #6楼不是自己的代码,肯定不能执行,一看那格式就知道。
    #7楼谢的真快,一看就知道没分辨能力,CSDN上什么是自己用心的回复,什么是随便搜索答案复制来的,有点能力的就能分辨出来。(这里的论坛标兵就是复制大王)。最后如果已经超过有效期了,我就不管了,虽然这题很简单,不过要做也得花费不少时间啊。