C# 給定正方型3點座標 求第4點

static void Main(string[] args)
{
    // 規律:X座標 Y座標應該都要兩兩一組 xy的長寬差值要一樣 只出現一次的就是第四點的座標 出現超過兩次表示座標錯誤
    Console.WriteLine($"請輸入三組座標:(格式範例 -1,0,0,0,0,-1)");
    string str = Console.ReadLine();
    int X = 0, Y = 0;

    str = "8,6,-2,6,-2,-6";

    string[] arrStr = str.Split(',');
    int[] arrInt = Array.ConvertAll(arrStr, s => int.Parse(s)); // 轉成int[]

    // X 座標另存 list,Y 座標另存 list
    List<int> lisX = new List<int>();
    List<int> lisY = new List<int>();
    for (int i = 0; i < arrInt.Length; i++)
    {
        if (i % 2 == 0)
            lisX.Add(arrInt[i]);
        else
            lisY.Add(arrInt[i]);
    }

    // 找座標出現次數
    var groupX = from x in lisX
                    group x by x into g
                    let count = g.Count()
                    select new { Value = g.Key, Count = count };
    var groupY = from x in lisY
                    group x by x into g
                    let count = g.Count()
                    select new { Value = g.Key, Count = count };

    if (groupX.Count() == 2 && groupY.Count() == 2) // X Y 座標應該都要有兩組
    {
        int xDistance = Math.Abs(groupX.ElementAt(1).Value - groupX.ElementAt(0).Value); // x 相減取絕對值 長度
        int yDistance = Math.Abs(groupY.ElementAt(0).Value - groupY.ElementAt(1).Value); // y 相減取絕對值 寬度
        if (xDistance == yDistance) // 長寬要相等
        {
            foreach (var item in groupX)
            {
                if (item.Count == 1)
                    X = item.Value;
            }

            foreach (var item in groupY)
            {
                if (item.Count == 1)
                    Y = item.Value;
            }
            Console.WriteLine($"第四組座標為:{X},{Y}");
        }
        else
            Console.WriteLine($"{str} 座標異常,無法為正方型的三組座標。");

    }
    else
        Console.WriteLine($"{str} 座標異常,無法為正方型的三組座標。");

    Console.Read();
}

發佈留言