Лидеры
Популярный контент
Показан контент с высокой репутацией 24.04.2020 в Сообщения
-
2 баллаРуда. math.max(3 - 30 * 0.606, 1.5 + 30 * 0.06013) < 3.341 Два. Накидал простой скрипт на питоне, для наглядного представления сканирований. import matplotlib.pyplot as plt import numpy as np CONST_A = 0.0601325742900371551513671875 CONST_B = -0.060606062412261962890625 x, y = np.array([0, 56, 56, 0]), np.array([0, 56 * CONST_A, 56 * CONST_B, 0]) plt.fill(x, y + 1.5, color = 'k', alpha = 0.5) plt.fill(x, y + 3, color = 'c', alpha = 0.5) # scans plt.scatter([30, 30, 30], [1.295, 3.341, 1.580], color = 'DarkBlue') plt.show() В scatter подать список расстояний и список полученных плотностей. Все-таки я сильно сомневаюсь, что многократное сканирование это рационально. Там ведь распределение равномерное и с расстоянием пересекающаяся область увеличивается до 72%, а это примерно 1.7% на каждый блок
-
2 баллаЭто не то же самое. Оба способа имеют право на существование. Можно сказать, что @Pengoid выполнил экспериментальное исследование, а @Doob теоретическое. И так как результаты совпали, то теория, скорее всего, верна, и эксперимент тоже поставлен верно, скорее всего. Оба молодцы. Ничего удивительного в том, что теоретические выкладки дают более короткое и наглядное объяснение, и красивые графики. В этом и заключается назначение теории. Благодаря этой теме я тоже кое-что понял про геосканер. Я раньше замечал, что абсолютное значение минимальных отрицательных величин шума всегда больше абсолютного значения его максимальных положительных величин. Например, -0.06060 против +0.06013 на единичном расстоянии при стандартной константе шума. Но в код я не заглядывал и понять причину не пытался. Но когда @Doob кинул ссылку на код, и я не поленился его почитать, причина аномалии стала очевидной. Дело в том, что исходными значениями для получения шума является набор случайных байт, которые затем преобразуются в числа с плавающей точкой. Это приводит к двум последствиям: 1) Шум геосканера имеет дискретную структуру, не смотря на то, что выражается значениями с плавающей точкой. Есть всего 256 фиксированных значений шума для определённого расстояния и константы шума. 2) Минимальное значение шума всегда больше его максимального значения в абсолютном выражении, т.к. исходный байт в архитектуре Intel кодирует 128 отрицательных значений, одно нулевое и 127 положительных. Cоотношение 128/127 равно соотношению 0.06060/0.06013 с погрешностью представления. Предполагаю, что это знание пригодится для уменьшения количества сканирований, например, при оценке реального значения константы шума, либо при многократном сканировании дальних объектов.
-
1 баллВариант, чтобы определить со 100% точностью за пока-что неопределенное количество сканирований. Алгоритм Имеем две возможные плотности для блока P1 и P2, причем P1 < P2. Находим R и максимальный шум Nmax = R*0.0606 Пусть, наш диапазон определяется переменными PMin, PMax = P2 - NMax, P1 + Nmax. Сканируем, блок пока полученное значение P0 не выйдет за диапазон [PMin; PMax]. При выходе из диапазона: если P0 < PMin - блок имеет плотность P1, если P0 > PMin - блок имеет плотность P2. Примерная оценка шанса выпадения за установленный диапазон Минимально требуемую погрешность можно вычислить за формулой: Nmin = Nmax - math.abs(P1-P2), причем если Nmin < 0, блок определяется с первого сканирования. Чем больше соотношение NMax/NMin, тем меньше сканирований в среднем понадобится для определения блока. Применение на примере R уже дано, а N = 30*0.0606 = 1.8 (округленно). Находим диапазон значений для блоков с данными плотностями, имеем [1.2; 3.3]. Сканируем до тех пор, пока значение не выйдет за промежуток, и точно узнаем блок. Если это был блок с плотностью 1.5, то условие выполнится, когда погрешность будет <-0.3, а для 3 - >0.3, а это довольно таки немного, 0.3 в 6 раз меньше 1.8, по этому шанс попадания в этом случае довольно большой. Кстати, если не округлять 1.818 + 1,5 < 3.341 (из примера), а значит плотность равна 3.
-
1 баллОсобенностью этой темы является длинный текст. Оформленный в виде длинной простыни он отпугивает читателей. Для упрощения восприятия желательно разбить текст на абзацы и смысловые блоки. Также желательно расположить их в порядке развития мысли, снабдить заголовками, выделяющимися из общего текста. Основным способом разделения абзацев на современных форумных движках является пустая строка. К заголовкам обычно применяется полужирное выделение. В первом предложении темы желательно объяснить читателю, куда он попал, зачем нужна эта тема, и к чему его может привести чтение. Например, так: в этой теме я предлагаю обсудить способность геосканера различать плотности руд с учётом шума. Или так: в этой теме я хочу описать своё исследование возможностей геосканера и оптимальных способов сканирования руд. Для примера я попробую воспроизвести своё восприятие темы. Сначала я вижу заголовок темы "Вычисление погрешности геосканера". Название интересное, но в теме может быть что угодно: программа, методика, исследование, вопрос, приглашение к обсуждению. Учитывая, что тема изначально находилась в разделе флудилки, можно было строить самые безумные предположения. Сейчас тема находится в беседке, что настраивает читателя и комментатора на более серьёзное отношение, но всё равно не понятно, чего автор ожидает от читателей темы. В начале я вижу следующее "Решил измерить зависимость погрешности геосканера от расстояния". Я не понимаю, к чему ведёт автор. Он хочет что-то спросить? Он хочет чем-то поделиться? Хочет обсудить? Я быстро просматриваю первый абзац (или что-то напоминающее абзац), вижу, что автор что-то для себя уже понял, сделал какие-то выводы. В следующем абзаце автор наконец-то рассказывает, зачем это нужно. Но до сих пор не понятно, кому это нужно: автору или его читателям. Автор всё ещё собирается что-то спросить, или проинформировать нас? Пробегаю ещё один длинный кусок текста (абзац или не абзац), и начинаю смутно представлять одну из целей автора. Но опять же, не понятно, он хочет поделиться способом достижения цели, или где-то далее по тексту попросит помощи? И так почти до самого конца этого текста я пытался понять, к чему ведёт меня автор. Но понял лишь смутно.
-
1 баллГайд хороший. Но я всё же склонен считать программирование на TypeScript в среде OpenComputers экзотикой. И необходимость явного приведения типов вряд ли является значимым поводом для смены одного языка на другой.
-
1 баллПривет, это моя первая программа для робота. Автоферма пшеницы. local args = {...} local io = require("io") local robot = require("robot") local comp = require("computer") local filesystem = require("filesystem") local r_forward = robot.forward local arg1 = args[1] local arg2 = args[2] function robot.forward() repeat os.sleep(0) until r_forward() return true end if (arg1 == "size") then if (arg2 == nil) then return print("Не указан размер") end local farmsize = io.open("/home/farm.cfg", "w") farmsize:write(arg2) farmsize:flush() farmsize:close() return print("Позиция установлена") end if (filesystem.exists("/home/farm.cfg") == false) then return print("Файл конфигурации не создан! пожалуйста используйте аргумент size *Размер поля*") end local farmsize = io.open("/home/farm.cfg") local size = farmsize:read() farmsize:close() function farm() robot.forward() for y = 1, size do -- собрать 1 линию robot.swingDown() robot.useDown() robot.placeDown() for x = 1, (size - 1) do robot.forward() robot.swingDown() robot.useDown() robot.placeDown() end -- поворот if y % 2 == 1 then robot.turnLeft() robot.forward() robot.turnLeft() else robot.turnRight() robot.forward() robot.turnRight() end end if(size%2 == 0) then robot.turnLeft() robot.turnLeft() robot.turnLeft() -- возвращение на базу for y = 1, (size - 1) do robot.forward() end robot.turnRight() robot.turnLeft() robot.forward() robot.turnRight() robot.forward() robot.turnAround() else for y = 1, (size - 1) do robot.forward() end robot.turnLeft() for y = 1, (size) do robot.forward() end robot.turnRight() robot.forward() robot.turnAround() end end function dropitem() robot.turnAround() for c = 2, 16 do robot.select(c) if robot.count() > 0 then robot.drop() else robot.select(1) break end end robot.turnAround() end if arg1 == "primary" then farm() if robot.count(2) == 64 then dropitem() end end local primary = nil while true do -- таймер(1час) for i = 1, 10 do os.sleep(370) print((10 * i) .. '%') end farm() if robot.count(2) == 64 then dropitem() end end Пару слов об аргументах *name*.lua primary(принудительный запуск сбора) *name*.lua size *size*(установка размера фермы) Также о настройке 1.Ферма должна быть одинаковая по размерам. т.е. 15x15 или 9x9 и т.д. 2.Робот должен быть установлен следующим образом(см.ниже) 3.(по желанию) дать роботу мотыгу чтобы он сам вспахал землю(в принципе просто можно задать ему размеры и дать семена и он сам вспашет землю и посадит семена) Просьба не судить строго так как это моя первая программа и вообще первая программа на языке LUA Жду адекватной критики и предложений. Спасибо за помощь игроку Asummonster
-
1 балл
-
0 балловА вы когдато думали что нас обманывают, заставляют вернутся к истокам и жить в пещерах, охотится на мамонтов (свинок) ради пропитания. При ядерной войне есть 2 выхода на спасение это жить под землей, и улететь в космос так что предлагаю расмотреть небольшой (громадный) модик (модище) на космос и другие планеты. Galactic Craft. и его аддон (ы). я б добавил ('Galaxy Space') ибо он самый вменяемый. А вы пробували летать на свинке в невесомости? Кататся на луноходе? Или завести весьма приятного слизне питомца что умеет развиватся? Плюсы модика + добавится модик с рф енергией + подходит под контент + новые планету + очень круто работает вместе с вратами из (sg craft) + перестрелки при низкой гравитацие Будем озеленять не только нашу планету но и другие!
Эта таблица лидеров рассчитана в Москва/GMT+03:00
