nucLeaRsc2

Untitled

Sep 20th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. (Faza 1 - locală)
  2.  
  3. pentru fiecare poligon din structura
  4. calcul normală la suprafaţă // vector poligon_normală
  5. calcul arie // vector poligon_arie = magnitudine(poligon_normală) / 2
  6. calcul normală normalizată // vector poligon_nn
  7.  
  8. // alocare clasa poligonului
  9. dacă magnitudine(componenta poligon_nn în plan XY) < NORMA_MAX_XY_POLIGON
  10. clasificare 'orizontal'
  11. altfel dacă magnitudine(componenta poligon_nn pe axa Z) < NORMA_MAX_Z_POLIGON
  12. clasificare 'vertical'
  13. altfel
  14. clasificare 'altfel'
  15.  
  16. // Chiar dacă am clasificat fiecare poligon, ne lipseşte o perspectivă
  17. // de ansamblu asupra întregii suprafeţe. O protuberantă (eroare de
  18. // reconstrucţie) poate apărea într-o suprafaţă altfel plană, sau, viceversa,
  19. // un mic poligon întâmplător orizontal poate apărea în vârful unui copac
  20.  
  21. (Faza 2 - eliminare poligoane HV eronate)
  22.  
  23. pentru fiecare poligon clasificat 'orizontal'
  24. set_poligoane_adiacente = colectarea t uturor poligoanelor adiacente
  25. într-o fereastră dacă ...
  26. ... magnitudine(componenta poligon_nn în plan XY) < NORMA_XY_IGNORA
  27.  
  28. // Acest prag NORM_IGNORE este important deoarece nu vrem ca poligoane care se
  29. // afla în proximitate spaţială dar sunt cel mai probabil opuse semantic
  30. // (H<>V) să ne influenţeze statistică. Această condiţie ne ajută să:
  31. // 1. procesăm corect colţurile - aflate, de exemplu, la interfaţa între
  32. // acoperişurile şi faţadele clădirilor
  33. // 2. eliminăm poligoane ce apar sub suprafaţa de interes, prezente de-a
  34. // lungul acesteia
  35.  
  36. set_poligoane_adiacente_h = selectarea poligoanelor H dintre cele selectate
  37. anterior
  38.  
  39. // în final compara raportul între două arii:
  40. // dacă poligonul curent este singurul orizontal într-o suprafaţă predominant
  41. // oblică el va fi reclasificat
  42.  
  43. dacă suma(arie(set_poligoane_adiacente_h)) /
  44. suma(arie(set_poligoane_adiacente)) > RAPORT_ARIE_F2
  45. păstrează categoria
  46. altfel
  47. reclasificare 'altfel'
  48.  
  49. // Aplicăm o procedură similară pentru poligoanele verticale
  50. pentru fiecare poligon clasificat 'vertical'
  51. ...
  52.  
  53. (Faza 3 - adăugare poligoane HV pe baza contextului)
  54.  
  55. // Căutam poligoane O ce ar trebui clasificate că H
  56. pentru fiecare poligon clasificat 'altfel'
  57. // Colectam poligoane adiacente similar fazei anterioare
  58. set_poligoane_adiacente = ...
  59. set_poligoane_adiacente_h = ...
  60.  
  61. // Din nou comparăm două arii, însă pentru a reduce riscul de a clasifica
  62. // suprafeţe că orizontale / sigure pentru aterizare în mod eronat, introducem
  63. // încă o comparaţie - un nou prag al inclinaţiei, mai permisiv decât primul,
  64. // însă nici foarte ridicat
  65.  
  66. dacă suma(arie(set_poligoane_adiacente_h)) /
  67. suma(arie(set_poligoane_adiacente)) > RAPORT_ARIE_F3 && ...
  68. ... magnitudine(omponenta poligon_nn în plan XY) < NORMA_MAX_XY_F3
  69. reclasificare 'orizontal'
  70. altfel
  71. păstrează categoria
  72.  
  73. // Finalmente, repetăm procedura cu un alt set de parametri
  74. // vizând suprafeţe verticale
  75. pentru fiecare poligon clasificat 'altfel'
  76. ...
  77.  
  78. Valorile parametrilor sunt următoarele:
  79. NORMA_MAX_XY_POLIGON = sin(10);
  80. NORMA_MAX_Z_POLIGON = sin(20);
  81. NORMA_XY_IGNORA = sin(75);
  82. NORMA_Z_IGNORA = sin(75);
  83. FEREASTRA_F2_X = 2;
  84. FEREASTRA_F2_Y = 2;
  85. FEREASTRA_F2_Z = 1;
  86. RAPORT_ARIE_F2 = 0.25;
  87. FEREASTRA_F3_X = 1;
  88. FEREASTRA_F3_Y = 1;
  89. FEREASTRA_F3_Z = 0.5;
Advertisement
Add Comment
Please, Sign In to add comment