C# 计算线条长度-线条之间的差异不小于';似乎不对

C# 计算线条长度-线条之间的差异不小于';似乎不对,c#,winforms,math,line,C#,Winforms,Math,Line,我写这篇文章是为了让你点击图像上的一个点,然后点击另一个点。这些点将添加到列表中,并在每2个点之间绘制一条线 我还一直在跟踪“区域”的线条位置。然后,使用32英寸计算线长度并保存 我注意到的是,你可以在照片上画一条线,只要长度是-----------,它在两点之间的长度可能是13。但是你的下一行可能看起来像-------------------------------,它的长度是3。每一行的上下都是这样。大的线显示大的,有时小的长度,小的线显示小的,有时大的长度 我不知道该说什么 我会发布所有我

我写这篇文章是为了让你点击图像上的一个点,然后点击另一个点。这些点将添加到列表中,并在每2个点之间绘制一条线

我还一直在跟踪“区域”的线条位置。然后,使用32英寸计算线长度并保存

我注意到的是,你可以在照片上画一条线,只要长度是
-----------
,它在两点之间的长度可能是
13
。但是你的下一行可能看起来像
-------------------------------
,它的长度是
3
。每一行的上下都是这样。大的线显示大的,有时小的长度,小的线显示小的,有时大的长度

我不知道该说什么

我会发布所有我认为重要的东西,看看事情是如何进行的

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button.Equals(MouseButtons.Left))
    {
        if (p1.X == 0)
        {
            p1.X = e.X;
            p1.Y = e.Y;

            var color = zoneMap1.GetPixel(e.X, e.Y);
            if (color == Color.FromArgb(0, 0, 255))
            {
                Zone1.Add("1");
            }
            else if (color == Color.FromArgb(0, 255, 0))
            {
                Zone1.Add("2");
            }
            else if (color == Color.FromArgb(255, 150, 1))
            {
                Zone1.Add("3");
            }
            else if (color == Color.FromArgb(255, 0, 0))
            {
                Zone1.Add("4");
            }
            else if (color == Color.FromArgb(255, 0, 255))
            {
                Zone1.Add("5");
            }
            else if (color == Color.FromArgb(0, 255, 255))
            {
                Zone1.Add("6");
            }
            else if (color == Color.FromArgb(255, 255, 0))
            {
                Zone1.Add("7");
            }
        }
        else
        {
            p2.X = e.X;
            p2.Y = e.Y;

            p1List.Add(p1);
            p2List.Add(p2);

            Invalidate();
            pictureBox1.Refresh();
            btnSubmit.Enabled = true;
            p1.X = 0;
        }
    }
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    using (var p = new Pen(Color.Red, 5))
    {
        for (int x = 0; x < p1List.Count; x++)
        {
            e.Graphics.DrawLine(p, p1List[x], p2List[x]);
        }
    }
}

private void btnSubmit_Click(object sender, EventArgs e)
{
    if (p1List.Count != 0)
    {
        for (int i = 0; i < p1List.Count; i++)
        {
            if (p1List.Count != 0 && p2List.Count != 0)
            {
                dist = (Convert.ToInt32(Math.Pow(p1List[i].X - p1List[i].Y, 2) + Math.Pow(p2List[i].X - p2List[i].Y, 2)) % 32);
                oracleConnection.Void.Add(new Tuple<string, int>(Zone1[i], dist));
            }
        }
    }
}

距离计算应结合
X
X
以及
Y
Y
,即

dist = sqrt( pow( p2.X-p1.X, 2 ) + pow( p2.Y-p1.Y, 2 ) )

你也应该能够证明为什么要减少模32。

没错,我不知道为什么我要用y做x。你的意思是什么?李:你在那里的表达毫无意义,但编写代码的人认为它有意义。这一思维过程是为什么代码是这样的一个理由。理由是错误的,但如果我们能理解你的理由,那么我们就能理解你为什么出错,以及如何帮助你纠正错误。我想他的意思是,这对你的计算有什么作用?读一下模的作用,就会明白为什么它不属于这个距离计算。提出这一要求的部门测量了1/32英寸的线条。当我来到stackoverflow并询问如何做到这一点时,我被告知使用
%32
var dist=Math.Sqrt(Math.Pow(p1List[I].X-p2List[I].X,2)+Math.Pow(p1List[I].Y-p2List[I].Y,2))
这个小组正在做的是用笔和纸画一条线。后来有人用她6英寸的刻度盘上的1/32测量了这条线。看看他们过去所有的测量结果,就像是
2,7,2,5,4
,而我所有的测量结果都是
20,25,18
。我需要做些什么来转换,所以它也会像尺子的1/32那样进行测量?
dist = sqrt( pow( p2.X-p1.X, 2 ) + pow( p2.Y-p1.Y, 2 ) )