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();
}