簡體   English   中英

如何在線/折線C#上查找相鄰點

[英]How to find neighbor Points on Line/Polyline c#

我在尋找一條線上的鄰居點時遇到問題。

我有一條折線和一點。 該點始終在線上。 線始終是直的(不傾斜)。

我想找到之前和之后的觀點。 (在圖像上,這些是C和D)。 做這個的最好方式是什么? 找到上一點可能更好(然后,找到下一點將是微不足道的)。

我的想法是使用循環和if語句,但也許存在更好的解決方案?

在此處輸入圖片說明

如果您可以將網格適合int值,這是一個幼稚的解決方案。 它應該涵蓋線不像平方螺旋線那樣“增長”的情況。 切換為雙精度時,請注意可能的舍入問題。

            var line = new List<Point>
        {
            new Point("A", 0, 0),
            new Point("B", 1, 0),
            new Point("C", 1, 1),
            new Point("D", 3, 1),
            new Point("E", 3, 2),
            new Point("F", 4, 2)
        };

        var p = new Point("P",2,1);

        Point first = null;
        foreach (var point in line)
        {
            if (first != null)
            {
                if (p.X == first.X && p.X == point.X
                    && (p.Y >= first.Y && p.Y <= point.Y
                        || p.Y <= first.Y && p.Y >= point.Y))
                {
                    PrintResult(first, p, point);
                    break;
                }

                if (p.Y == first.Y && p.Y == point.Y
                    && (p.X >= first.X && p.X <= point.X
                        || p.X <= first.X && p.X >= point.X))
                {
                    PrintResult(first, p, point);
                    break;
                }

            }

            first = point;
        }

        Console.ReadKey();
    }

    private static void PrintResult(Point first, Point p, Point second)
    {
        Console.WriteLine(first.Name);
        Console.WriteLine(p.Name);
        Console.WriteLine(second.Name);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM