已知直线两点,如何直线上标识长度?
如:
          1880米(如何标识)
______________________________而且标识必须与直线平行,在线的中间。

解决方案 »

  1.   

    根据线的起始点位置,得到其上的中点位置(x,y) ,再将x减少适当坐标,Y不变,得到新坐标(x1,Y).生成一个label,文字为1880米.location为(X1,Y) 
    这样满足要求.
      

  2.   

    你好,根据两个点的坐标,x,y各一半,再适当加上一些值作为坐标和线的间距用,作为label的坐标。
    不知道是不是这个意思。
      

  3.   

    to min_jie 
    1.不一定在窗体上
    2.画线,然后在线中间加上表示长度的文字说明。(因为线不一定水平,所以要保证字与线的平行)
      

  4.   

    to aspnetx
    不是这意思。因为线的方向不一定,而且要保证字与线的平行。
      

  5.   

    只能用 Graphics 去画了, 或者第三方控件.内置控件不能满足倾斜的要求
      

  6.   

    to min_jie 
    是的。标识也要画出来。
      

  7.   

    to greystar 
    能给带代码吗?
      

  8.   

    得到整条线段的长度,然后计算1880m对应的长度,计算这个点的坐标,然后在这个点上面drawstring就行了
      

  9.   

    应该greystar如所说,需要转换坐标,否则输出的字与线不平行
      

  10.   

     根据坐标点可以得到一个具体的长度 但是你的有一个参照  假如说 有一组2point 相减等于100 那么这个代表是实际1000m 那么你就把得到的值/100 * 1000m 得到实际长度
      

  11.   

    根据x y  坐标点 取中间。实例化一个现实对象(lable)。显示
    根据画图,全画上去。
      

  12.   

    要考虑线与文字的平行,而且是使用bitmap直接来画,不是使用其它label这些控件,因为最终需要生成图片。
      

  13.   

    LZ不妨看一下Autocad是如何标注的。
    照猫画虎应该效果不差
      

  14.   

    有直线 y=kx+b
    先求出k和b
    利用公式可以求出距它为s的另条直线y=kx+b2,然后..... 
      

  15.   

    这样标吗?
    你应该也还有一个比例的吧!可以通过这个公式进行转换,在加上一个比例应该可以实现你所需的功能
    你如果要比较大的转换的话,就不要用int用float或是double这们精度高 public class CommonSettings
        {
            /// <summary>
            /// 把像素换算成毫米
            /// </summary>
            /// <param name="Pixel">多少像素</param>
            /// <returns>多少毫米</returns>
            public static float PixelConvertMillimeter(float Pixel)
            {
                return Pixel / 96 * 25.4f;
            }
            
            /// <summary>
            /// 把毫米换算成像素
            /// </summary>
            /// <param name="Millimeter">多少毫米</param>
            /// <returns>多少像素</returns>
            public static int MillimeterConvertPixel(float Millimeter)
            {
                return ((int)(Millimeter / 25.4 * 96)+1);
            }
        }
      

  16.   

    as的,以前写的,你可以参考 //取二直线(y=kx+b)交点
    private function getCrossPoint(l1,l2):Point{
    var x:Number=(l1.b-l2.b)/(l2.k-l1.k);
    var y= (l2.k*l1.b-l1.k*l2.b)/(l2.k-l1.k);
    return new Point(x,y) 
    }
    //画两垂直线的直角号
    public function drawRightAngleNote(b1,b2,toPoint,nColor,nTrans){
    var t1={k:b1.k,b:b1.b+10/Math.cos(Math.atan(b1.k))}
    var t2={k:b2.k,b:b2.b+10/Math.cos(Math.atan(b2.k))}
    var p1=getCrossPoint(t1,b2)
    var p2=getCrossPoint(t1,t2)
    var p3=getCrossPoint(t2,b1)
    spCanvas.lineStyle(1, nColor, nTrans);
    spCanvas.moveTo(p1.x,p1.y)
    spCanvas.lineTo(p2.x,p2.y)
    spCanvas.lineTo(p3.x,p3.y)
    }
    //由两点取得直线(y=kx+b)
    public function getBeeLine(p1:Point,p2:Point):Object{
    var x1=p1.x,x2=p2.x
    var y1=p1.y,y2=p2.y
    var k=(y2-y1)/(x2-x1)
    var b=x1*(y1-y2)/(x2-x1)+y1
    return {k:k,b:b}
    }
      

  17.   

    三角函数都忘了差不多了!思路差不多!
    你试着在看看吧!要看看三角函数方面的资料
    -----------------------------
    \此角
     \
      \
       \
        \
         \ 
    public Form4()
            {
                InitializeComponent();
                //SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
                //SetStyle(ControlStyles.ResizeRedraw, true);
            }       List<Point> Points = new List<Point>();
            Point MovePoint;        private void Form4_MouseDown(object sender, MouseEventArgs e)
            {
                if (Points.Count == 0)
                {
                    Points.Add(e.Location);
                    MovePoint = new Point(e.X, e.Y);
                }
                else if (Points.Count == 1)
                    Points.Add(e.Location);
                else if (Points.Count == 2)
                {
                    Points.RemoveAt(0);
                    Points.RemoveAt(0);
                }
            }        private void Form4_MouseMove(object sender, MouseEventArgs e)
            {
                if (Points.Count == 1)
                    MovePoint = new Point(e.X,e.Y);
                this.Refresh(); 
            }        private void Form4_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                if (Points.Count == 1)
                {
                    e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Red)), Points[0], MovePoint);
                }
                else if (Points.Count == 2)
                {
                    e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Red)), Points[0], Points[1]);
                    int x = Points[1].X - Points[0].X;
                    int y = Points[1].Y - Points[0].Y;                double z = Math.Sqrt(x * x + y * y);                double zz = Math.Asin(y / z)*50;//值有问题!                GraphicsState state = g.Save();
                    Matrix RotationTransform = new Matrix(1, 0, 0, 1, 1, 1); //rotation matrix
                    RotationTransform.RotateAt((float)zz, Points[0]);
                    g.Transform = RotationTransform;
                    g.TranslateTransform(0, x/2);                g.DrawString("Test", new Font("vanda", 10), Brushes.Blue, Points[0]);
                    g.Restore(state);
                }
            }
        }