| Автор |
Съобщение |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 "Математически" проблем
Блъскам си главата над следния проблем: В тая таблица полетата са номерирани спираловидно. Опитвам се да изкарам формула, която да ми дава корелацията между индексите в тая спирала и декартови координати. Предполагам, че индекс 0 отговаря на координати 0,0. Някакви идеи? 
_________________ 'просто' е технически синоним на 'красиво'
|
| Вто Май 31, 2022 10:38 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: "Математически" проблем
|
| Вто Май 31, 2022 11:29 pm |
|
 |
|
al_at
Ранг: Форумен бог
Регистриран на: Пет Апр 13, 2018 4:00 pm Мнения: 1622 Местоположение: София
|
 Re: "Математически" проблем
С една формула не се сещам как ще стане, ще дам алгоритъм за намиране на координатите. Забелязва се, че числата са разположени в концентрични зони с квадратна форма: Зона 0: 0 Зона 1 : 1 до 8 Зона 2 : 9 до 24 Зона 3 : 25 до 48 Зона 4 : 49 до 80 Зоните определят границите на координатите - зона 0 x=0, y=0 зона 1: х,y от -1 до +1 т.н. Може да се изведе следната формула за номера на зоната Nzone: Nzone = round(sqrt(Index)/2) Броят на числата по страната на квадрата е: Size_Zone = Nzone+2 Първото число в ненулевата зона е: First_in_Zone = (Size_Zone-2)*(Size_Zone-2) Определяме позицията на числото в зоната: Pos_in_Zone = Index - First_In_Zone Всяка зона има 4 подзони - страните на квадрата от 0 до 3. Определяме подзоната: Sub_Zone = Trunc(Pos_in_Zone/(Size_Zone-1)) Определяме позицията в подзоната: Pos_in_Sub_Zone = Index - Sub_Zone*(Size_Zone-1) В зависимост от подзоната от 0 до 3, формулите са различни - за подзона 0: X = ((Size_Zone-1)/2) - Pos_in_Sub_Zone; Y = Nzone; - за подзона 1: Y = ((Size_Zone-1)/2) - Pos_in_Sub_Zone; X = Nzone; - за подзона 2: X = - ((Size_Zone-1)/2) + Pos_in_Sub_Zone; Y = - Nzone; - за подзона 3: Y = - ((Size_Zone-1)/2) + Pos_in_Sub_Zone; X = - Nzone; Идеята мисля, че е вярна, ако съм сбъркал във формулите някъде, то е от бързане, че имам и много работа.
|
| Сря Юни 01, 2022 9:30 am |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: "Математически" проблем
На няколко теста мина, и да има грешка, идеята е ясна. Копи-пейст:
|
| Сря Юни 01, 2022 10:35 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: "Математически" проблем
Мерси, ама на мен проблемът ми е малко по-общ (оттук напъните за формула). Аз съм дал пример с таблица с 81 полета, обаче в действителност тя е доста по-голяма. Всъщност дори не знам точно колко е голяма, знам само броя полета в нея, и те отгоре на всичко може да се менят. Затова търся решение което не зависи от предварително дефиниран размер
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 01, 2022 11:25 am |
|
 |
|
al_at
Ранг: Форумен бог
Регистриран на: Пет Апр 13, 2018 4:00 pm Мнения: 1622 Местоположение: София
|
 Re: "Математически" проблем
То ако се загледаш по-внимателно в алгоритъма, ще видиш, че той не зависи от размера. Броят на зоните не е ограничен, а броят на подзоните е винаги 4.
|
| Сря Юни 01, 2022 11:38 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: "Математически" проблем
Доста интересни линкове. Ще ги прегледам по-подробно. Мерси! Тоя проблем се оказа много по-сложен отколкото изглеждаше на пръв поглед... 
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 01, 2022 11:51 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: "Математически" проблем
Да, ще го загледам по-подробно! Първоначално помислих че е само за специфичния пример който съм дал
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 01, 2022 11:53 am |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: "Математически" проблем
Не стана ясно, описание на алгоритъм търсиш, или код който да работи?
С al_at сме писали в един интервал, и е дал описание.
Примера, който дадох, няма ограничение за размерите на спиралата/куба.
Само сменяш 'u/int16_t' с размерност по желание, ако спиралата мине 65535.
|
| Сря Юни 01, 2022 12:22 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: "Математически" проблем
Ще го пробвам по-късно днес наготово твоя код. Мерси!
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 01, 2022 12:44 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 Re: "Математически" проблем
част от кода може да изглежда така, ако предпочиташ на четно.
|
| Сря Юни 01, 2022 12:48 pm |
|
|