1. C# / Говнокод #8693

    +127

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    //1
               if (EdgePoints[X + 1, Y] == 2)
                {
                    EdgeMap[X + 1, Y] = 1;
                    VisitedMap[X + 1, Y] = 1;
                    Travers(X + 1, Y);
                    return;
                }
                //2
                if (EdgePoints[X + 1, Y - 1] == 2)
                {
                    EdgeMap[X + 1, Y - 1] = 1;
                    VisitedMap[X + 1, Y - 1] = 1;
                    Travers(X + 1, Y - 1);
                    return;
                }
    
               //3
    
                if (EdgePoints[X, Y - 1] == 2)
                {
                    EdgeMap[X , Y - 1] = 1;
                    VisitedMap[X , Y - 1] = 1;
                    Travers(X , Y - 1);
                    return;
                }
    
               //4
    
                if (EdgePoints[X - 1, Y - 1] == 2)
                {
                    EdgeMap[X - 1, Y - 1] = 1;
                    VisitedMap[X - 1, Y - 1] = 1;
                    Travers(X - 1, Y - 1);
                    return;
                }
                //5
                if (EdgePoints[X - 1, Y] == 2)
                {
                    EdgeMap[X - 1, Y ] = 1;
                    VisitedMap[X - 1, Y ] = 1;
                    Travers(X - 1, Y );
                    return;
                }
                //6
                if (EdgePoints[X - 1, Y + 1] == 2)
                {
                    EdgeMap[X - 1, Y + 1] = 1;
                    VisitedMap[X - 1, Y + 1] = 1;
                    Travers(X - 1, Y + 1);
                    return;
                }
                //7
                if (EdgePoints[X, Y + 1] == 2)
                {
                    EdgeMap[X , Y + 1] = 1;
                    VisitedMap[X, Y + 1] = 1;
                    Travers(X , Y + 1);
                    return;
                }
                //8
    
                if (EdgePoints[X + 1, Y + 1] == 2)
                {
                    EdgeMap[X + 1, Y + 1] = 1;
                    VisitedMap[X + 1, Y + 1] = 1;
                    Travers(X + 1, Y + 1);
                    return;
                }

    Разворот циклов ручками
    Автор кода из Индии.
    http://www.codeproject.com/KB/cs/Canny_Edge_Detection.aspx

    Запостил: killerDJO, 01 Декабря 2011

    Комментарии (5) RSS

    • Там точки перебираются по кругу.
      4 3 2
      5    1
      6 7 8

      Может поэтому так сделано?
      Ответить
      • Именно поэтому так и сделано, но такое лучше делать не кучей if-ов, а двумя вложенными циклами и проверкой внутри.
        Ответить
    • Посмотрел проект - не самый худший проект, который я видел.
      Есть там правда некоторое количество непонятных захардкоженых чисел, и if'ом, и почти идентичным содержанием условий.
      Но, в общем и целом, работать будет:

      float min=1000;
                  <...>
                  int mult = (int)(1 / min);
                  int sum = 0;
                  if ((min > 0) && (min < 1))
      Ответить
    • Реализация свёртки доставляет, во имя Вишну!
      Ответить
    • От прекрасных мечтаний отвлёк звонок мобильника:
      Ответить

    Добавить комментарий