Как сказать, пересекает ли строка полигон в C#?

Иначе ( кредит ):

@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @( 
    Set Month=%%A
    Set Day=%%B
    Set Year=%%C
)

@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%

Примечание, что и мои ответы здесь все еще уверены в повестке дня и месяц, как определено региональными настройками - не уверенный, как работать вокруг этого.

9
задан nbro 4 March 2018 в 19:50
поделиться

2 ответа

В .NET framework нет встроенного кода для обнаружения границ.

Вот код (перенесенный на C #), который делает то, что вам нужно (фактический алгоритм можно найти в comp.graphics.algorithms в группах Google):

public static PointF FindLineIntersection(PointF start1, PointF end1, PointF start2, PointF end2)
{
    float denom = ((end1.X - start1.X) * (end2.Y - start2.Y)) - ((end1.Y - start1.Y) * (end2.X - start2.X));

    //  AB & CD are parallel 
    if (denom == 0)
        return PointF.Empty;

    float numer = ((start1.Y - start2.Y) * (end2.X - start2.X)) - ((start1.X - start2.X) * (end2.Y - start2.Y));

    float r = numer / denom;

    float numer2 = ((start1.Y - start2.Y) * (end1.X - start1.X)) - ((start1.X - start2.X) * (end1.Y - start1.Y));

    float s = numer2 / denom;

    if ((r < 0 || r > 1) || (s < 0 || s > 1))
        return PointF.Empty;

    // Find intersection point
    PointF result = new PointF();
    result.X = start1.X + (r * (end1.X - start1.X));
    result.Y = start1.Y + (r * (end1.Y - start1.Y));

    return result;
 }
20
ответ дан 4 December 2019 в 08:52
поделиться

Похоже, эта статья поможет

http://www.codeproject.com/KB/recipes/2dpolyclip.aspx

Этот код представляет собой двумерный фрагмент многоугольника. алгоритм, который точно определяет, где линия пересекается с границей многоугольника. Этот код работает как для вогнутых, так и для выпуклых многоугольников совершенно произвольной формы и может обрабатывать любую ориентацию линии.

0
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: