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

    −125

    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
    // Преобразовывает геокоординаты из одной СК в другую
    //
    // КоординатыТочки 			- Структура	- координаты
    //
    // ПараметрыПреобразования	- Структура - параметры преобразования из одной системы коорднат в другую
    //
    // ВысотаТочки 				- Число		- выстоа точки над уровнем моря
    //
    // Точность					- Число		- точность возвращаемых координат
    //
    // Возвращаемое значение:
    //   Структура	- координаты
    //
    Функция ПреобразоватьКоординаты(КоординатыТочки, ПараметрыПреобразования, ВысотаТочки = 0, Точность = 6) Экспорт
    
    	ПП = ПараметрыПреобразования;
    	
    	ШиротаВГрадусах 	= КоординатыТочки.Широта;
    	ДолготаВГрадусах 	= КоординатыТочки.Долгота; 
    	
    	ЧислоПи = 3.14159265358979;
    	ЧислоУгловыхСекундВРадиане = 206264.8062;
    	
    	КвадратЭксцентриситетаИсходногоЭллипсоида 	= 2 * ПП.СжатиеИсходногоЭллипсоида - Pow(ПП.СжатиеИсходногоЭллипсоида , 2);
    	КвадратЭксцентриситетаКонечногоЭллипсоида 	= 2 * ПП.СжатиеКонечногоЭллипсоида - Pow(ПП.СжатиеКонечногоЭллипсоида , 2);
    	
    	СреднееБольшаяПолуось 				= (ПП.БольшаяПолуосьИсходногоЭллипсоида + ПП.БольшаяПолуосьКонечногоЭллипсоида) / 2;
    	СреднееКвадратЭксцентриситета 		= (КвадратЭксцентриситетаИсходногоЭллипсоида + КвадратЭксцентриситетаКонечногоЭллипсоида) / 2;
    	РазностьБольшихПолуосей 			= ПП.БольшаяПолуосьКонечногоЭллипсоида - ПП.БольшаяПолуосьИсходногоЭллипсоида;
    	РазностьКвадратовЭксцентриситетов 	= КвадратЭксцентриситетаКонечногоЭллипсоида - КвадратЭксцентриситетаИсходногоЭллипсоида;
    	
    	ШиротаВРадианах 	= ШиротаВГрадусах * ЧислоПи / 180;
    	ДолготаВРадианах 	= ДолготаВГрадусах * ЧислоПи / 180;
    	РадиусКривизныМеридианногоСечения 	= СреднееБольшаяПолуось * (1 - СреднееКвадратЭксцентриситета) 
    	/ Pow(1 - СреднееКвадратЭксцентриситета * Pow(Sin(ШиротаВРадианах) , 2) , 1.5);
    	РадиусКривизныПервогоВертикала 		= СреднееБольшаяПолуось * Pow(1 - СреднееКвадратЭксцентриситета 
    	* Pow(Sin(ШиротаВРадианах) , 2) , -0.5);
    
    	СмещениеШиротыВСекундах 	= ЧислоУгловыхСекундВРадиане / (РадиусКривизныМеридианногоСечения + ВысотаТочки) 
    	* (РадиусКривизныПервогоВертикала / СреднееБольшаяПолуось * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) 
    	* Cos(ШиротаВРадианах) * РазностьБольшихПолуосей + (Pow(РадиусКривизныПервогоВертикала , 2) / Pow(СреднееБольшаяПолуось , 2) + 1) 
    	* РадиусКривизныПервогоВертикала * Sin(ШиротаВРадианах) * Cos(ШиротаВРадианах) * РазностьКвадратовЭксцентриситетов / 2 
    	- (ПП.ЛинейноеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.ЛинейноеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
    	* Sin(ШиротаВРадианах) + ПП.ЛинейноеСмещениеОсьАппликат * Cos(ШиротаВРадианах)) 
    	- ПП.УгловоеСмещениеОсьАбсцисс * Sin(ДолготаВРадианах) * (1 + СреднееКвадратЭксцентриситета * Cos(2 * ШиротаВРадианах)) 
    	+ ПП.УгловоеСмещениеОсьОрдинат * Cos(ДолготаВРадианах) * (1 + СреднееКвадратЭксцентриситета * Cos(2 * ШиротаВРадианах)) 
    	- ЧислоУгловыхСекундВРадиане * ПП.ДифференциальноеРазличиеМасштабов * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) 
    	* Cos(ШиротаВРадианах);
    	
    	СмещениеДолготыВСекундах 	= ЧислоУгловыхСекундВРадиане / ((РадиусКривизныПервогоВертикала + ВысотаТочки) 
    	* Cos(ШиротаВРадианах)) * (-ПП.ЛинейноеСмещениеОсьАбсцисс * Sin(ДолготаВРадианах) 
    	+ ПП.ЛинейноеСмещениеОсьОрдинат * Cos(ДолготаВРадианах)) + Tan(ШиротаВРадианах) * (1 - СреднееКвадратЭксцентриситета) 
    	* (ПП.УгловоеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.УгловоеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
    	- ПП.УгловоеСмещениеОсьАппликат;
    
    	СмещениеВысоты 				= -СреднееБольшаяПолуось / РадиусКривизныПервогоВертикала * РазностьБольшихПолуосей 
    	+ РадиусКривизныПервогоВертикала * Pow(Sin(ШиротаВРадианах) , 2) * РазностьКвадратовЭксцентриситетов / 2 
    	+ (ПП.ЛинейноеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.ЛинейноеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
    	* Cos(ШиротаВРадианах) + ПП.ЛинейноеСмещениеОсьАппликат * Sin(ШиротаВРадианах) 
    	- РадиусКривизныПервогоВертикала * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) * Cos(ШиротаВРадианах) 
    	* (ПП.УгловоеСмещениеОсьАбсцисс / ЧислоУгловыхСекундВРадиане * Sin(ДолготаВРадианах) 
    	- ПП.УгловоеСмещениеОсьОрдинат / ЧислоУгловыхСекундВРадиане * Cos(ДолготаВРадианах)) 
    	+ (Pow(СреднееБольшаяПолуось , 2) / РадиусКривизныПервогоВертикала + ВысотаТочки) * ПП.ДифференциальноеРазличиеМасштабов;
    	
    	Возврат Новый Структура("Широта,Долгота,Высота", Окр(ШиротаВГрадусах + СмещениеШиротыВСекундах / 3600, Точность), Окр(ДолготаВГрадусах + СмещениеДолготыВСекундах / 3600, Точность), Окр(ВысотаТочки + СмещениеВысоты,3));
    	
    КонецФункции

    Как ни странно, но работает)))

    Запостил: TamerlanDE, 08 Июня 2012

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

    • показать все, что скрытоА не пошёл бы ты на хуй?
      Ответить
    • Возврат Новый Структура. Моя твоя не понимать :)

      А до этого момента - ну, возможно, не оптимальный код. Но разобраться можно при желании, т.к. переменные не v1, xp, xc3...

      P.S. а че это одноэскники синус и степень не перевели?
      Ответить
      • показать все, что скрытоПошёл ты ...
        Ответить
      • Думал, что движок Говнокода поймет синтаксис 1С... но видимо, не судьба
        Ответить
      • Плохо что ты не понимаешь язык

        В 1С вполне можно написать и так:

        Функция Структуравнатуре(а,б)
        Возврат Новый Структура("а,б,в_сидело_на_трубе",а,б,а* б);
        КонецФункции // Структуравнатуре()

        А то и повкладывать структуры друг в друга, даже создавая новых переменных, вот как выше
        Ответить
    • Язык тьюринг-полный, можно хоть ракеты запускать. Видимо, это пример.
      Ответить
    • А чем вам не нравится преобразование системы координат? Геометрию учили?
      А это случаем не из программы для логистов, которая засасывает GPS- координаты и строит графы поездок, считает расстояния и затраты топлива на поездку и прочая? Сам видел подобную конфу, которая по векторным географическим картам строила маршрут по которому везти товар.
      Ответить
    • показать все, что скрытоFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU U
      Ответить
    • Думаю TamerlanDE до такого кода, как до луны пешком. Тупые одинесники, даже говнокод не могу распознать.
      Ответить
      • Тут все дело в имени переменных. То бишь не a = new b, а ПроцессорВыводаРезультатаКомпоновкиДанны хВТабличныйДокументИмениНуралиеваБорисаГ еоргиевича = Новый ПроцессорВыводаРезультатаКомпоновкиДанны хВТабличныйДокумент
        Ответить
    • Код обалденный. К говнокоду отношения не имеет.
      Ответить

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