/// Checks if the two polygons are intersecting.
bool IsPolygonsIntersecting(Polygon a, Polygon b)
{
foreach (var polygon in new[] { a, b })
{
for (int i1 = 0; i1 < polygon.Points.Count; i1++)
{
int i2 = (i1 + 1) % polygon.Points.Count;
var p1 = polygon.Points[i1];
var p2 = polygon.Points[i2];
var normal = new Point(p2.Y - p1.Y, p1.X - p2.X);
double? minA = null, maxA = null;
foreach (var p in a.Points)
{
var projected = normal.X * p.X + normal.Y * p.Y;
if (minA == null || projected < minA)
minA = projected;
if (maxA == null || projected > maxA)
maxA = projected;
}
double? minB = null, maxB = null;
foreach (var p in b.Points)
{
var projected = normal.X * p.X + normal.Y * p.Y;
if (minB == null || projected < minB)
minB = projected;
if (maxB == null || projected > maxB)
maxB = projected;
}
if (maxA < minB || maxB < minA)
return false;
}
}
return true;
}
Для получения дополнительной информации см. Эту статью: Обнаружение столкновения 2D-полигонов - проект кода
Примечание: Алгоритм работает только для выпуклых многоугольники, заданные либо по часовой стрелке, либо против часовой стрелки.
Я всегда проверяю это. На самом деле я считаю, что это поведение по умолчанию для Team System Source Control.
Либо не используйте версию AssemblyInfo.cs вообще, либо поместите их «версию для разработчиков» в репозиторий и используйте CruiseControl.Net svn-revert их после сборки (я делаю это позже, чтобы сборки, созданные на рабочих станциях разработчиков, легко удаляются из «официальных», загруженных с CruiseControl.Net).
Что касается воспроизведения тех же меток сборки позже - вам уже нужно выполнить перестройку, вызвав MSBuild / NAnt вручную, просто пропустите установите для него CCNetLabel соответствующее значение, и вы получите те же версии сборки, что и при сборке, вызванной из CruiseControl.Net (MSBuild: /p:CCNetLabel=1.4.2.333
, NAnt: - D: CCNetLabel = 1.4.2.333
).
Я использую файл CommonAssemblyInfo.cs, на который я добавляю ссылку в каждом проекте.
Единственный атрибут, который у меня есть в этом файле, - AssemblyFileVersion, и CC.Net / Msbuild обновляют версию каждую сборку.
Убедитесь, что любой проект, который включает CommonAssemblyInfo.cs, не имеет повторяющихся атрибутов в AssemblyInfo.cs.
Если вы посмотрите исходный код CC.Net, вы увидите, как они сконфигурированы. .
Мы иметь сценарий MSBuild, который генерирует все необходимые файлы AssemblyInfo.cs перед сборкой. Таким образом, я также могу использовать номер ревизии SVN в версиях сборки. Файлы AssemblyInfo.cs не регистрируются в SVN (они игнорируются, чтобы не беспокоить людей), а генерируются перед сборкой (неважно, сценарий автоматической сборки или из VS).
Я также предоставьте пакетный файл для создания файлов AssemblyInfo.cs, чтобы разработчикам не приходилось беспокоиться о деталях.