У меня проблема. Я создал этот код, чтобы проверить, сколько общих ребер имеет моя формация треугольника:
public class TriangleRegistryList
{
public float x1 { get; set; }
public float y1 { get; set; }
public float x2 { get; set; }
public float y2 { get; set; }
public float x3 { get; set; }
public float y3 { get; set; }
public int ShapeNum { get; set; }
public TriangleRegistryList()
{
this.AdjacentShapeNumbers = new List<int>();
}
public List<int> AdjacentShapeNumbers { get; set; }
public IEnumerable<(float x, float y)> GetPoints()
{
yield return (x1, y1);
yield return (x2, y2);
yield return (x3, y3);
}
public bool IsAdjacentTo(TriangleRegistryList other)
{
var isAdjacentTo =
GetPoints().Intersect(other.GetPoints()).Count() >= 2;
if (isAdjacentTo)
{
if(other.ShapeNum != 0)
{
AdjacentShapeNumbers.Add(other.ShapeNum);
}
}
return isAdjacentTo;
}
}
public static class EnumerableExtensions
{
public static IEnumerable<(T first, T second)> GetPairs<T>(this IEnumerable<T> list)
{
return list.SelectMany((value, index) => list.Skip(index + 1),
(first, second) => (first, second));
}
}
А потом я создаю список следующим образом:
triangles = new List<TriangleRegistryList>();
triangles.Add(new TriangleRegistryList
{
x1 = (float)405,
y1 = (float)701.4806,
x2 = (float)675,
y2 = (float)701.4806,
x3 = (float)540,
y3 = (float)935.3074
});
triangles.Add(new TriangleRegistryList
{
x1 = (float)135,
y1 = (float)701.4806,
x2 = (float)405,
y2 = (float)701.4806,
x3 = (float)270,
y3 = (float)935.3074
});
triangles.Add(new TriangleRegistryList
{
x1 = (float)270,
y1 = (float)935.3074,
x2 = (float)540,
y2 = (float)935.3074,
x3 = (float)405,
y3 = (float)701.4806
});
И, наконец, я вызываю метод, чтобы сравнить все стороны треугольника друг с другом.
int sharedEdges = triangles.GetPairs().Where(t => t.first.IsAdjacentTo(t.second)).Count();
Это прекрасно работает, но теперь я хочу сравнить 1 треугольник со списком, чтобы я мог проверить, сколько общих ребер имеет 1 треугольник с формацией. Я уже создал этот цикл, но я не знаю, как продолжить:
foreach (TriangleRegistryList triangle in triangles)
{
int sharedEdges = triangles.GetPairs().Where(t => t.first.IsAdjacentTo(t.second)).Count();
}
Как можно сравнить только 1 треугольник со списком, чтобы увидеть, сколько общих ребер имеет 1 треугольник с формацией?