Перейти к содержимому

Лидеры


Популярный контент

Показан контент с высокой репутацией 25.03.2021 во всех областях

  1. 2 балла
    Описание Данная программа позволяет видеть местоположение руды вокруг игрока. Работает следующим образом: Планшет с геосканером и сетевой картой сканирует область вокруг игрока и отправляет на стационарный компьютер информацию о найденных блоках Компьютер с терминалом OpenGlasses2 и сетевой картой принимает информацию о блоках и рисует этим блокам подсветку. Фичи и особенности Используется методика из исследования Дуба, которая позволяет весьма точно определять руду Настраиваемые параметры сканирования c валидацией и коррекцией сохраняются в конфиг при выходе из программы Понятный ui Подсветка границ области сканирования Отображение на очках с использованием всего 2 виджетов фпс снижается меньше Это программа работает на версии игры 1.12.2 с аддоном OpenGlasses2 теоретически можно портировать на 1.7.10 Скриншоты Видео Установка Требуемое железо Планшет, минимальное Планшет, рекомендуемое Стационарный компьютер Вместо системного блока 3 тира можно юзать серверную стойку с сервером 2 тира. Также вместо связанной карты можно юзать беспроводную сетевую, однако, радиус действия в этом случае будет ограничен. Все процессоры нужно переключить на Lua 5.3(шифт+пкм). На планшет и компьютер устанавливаем OpenOS. На планшет устанавливаем программу и ее либы wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/oresense/oresense_tablet.lua wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/simple_libs/bit_array.lua lib/bit_array.lua pastebin get iKzRve2g lib/forms.lua На комп устанавливаем программу и ее либы wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/oresense/oresense_server.lua wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/simple_libs/bit_array.lua lib/bit_array.lua Использование Привязываем очки к терминалу и надеваем. Запускаем на компе oresense_server. Программа будет работать в фоновом режиме, поэтому комп можно юзать для чего-нибудь еще. Запускаем на планшете oresense_tablet. Синие поля позволяют настроить параметры. Большая красная кнопка запускает сканирование. Во время этого процесса лучше не сдвигаться с места. По окончанию сканирования оглядитесь вокруг - руда будет подсвечена красными каркасными кубами. Благодарности Спасибо @Doob и всем, кто ему помогал, за исследование принципов работы геолайзера и статью об этом Спасибо @Zer0Galaxy за либу гуи forms Спасибо @BrightYC за реью гуи и идею мэйн-картинки Спасибо @Sainthozier за реью гуи Спасибо @Fingercomp за функцию индексации координат, к сожалению, она не понадобилась Спасибо людям из irc-чата за саппорт по ОС и Lua Ссылки Гитхаб: https://github.com/hohserg1/OpenComputersPrograms/tree/master/oresense
  2. 1 балл
    Неа, кое-че должен) https://en.wikipedia.org/wiki/MIT_License
  3. 1 балл
    Пока компьютер спит, из него можно спокойно вытащить все планки памяти. Крашнется компьютер только при получении какого-либо события. Обнаружил это @BrightYC. Презабавно. #какие-то #теги #самсебетвиттер
  4. 1 балл
    Провел эксперимент, в котором нашел зависимость погрешности геосканера от расстояния между самим сканером и сканируемым блоком. Результаты Максимальная погрешность NMax строго пропорциональна расстоянию R, которую можно вычислить по формуле NMax = R/16.5 (более точный вариант: NMax = R*0.0606 - товарищи посмотрели в код и подсказали). При любом расположении сканируемого блока в зоне видимости сканера 65*65*64 (сканер находится в центре) расстояние можно вычислить по формуле: R = x^2 + y^2 + (z - 33)^2, где x и y - координаты сканируемого столба относительно сканера, а z - номер элемента в таблице, которую возвращает сканер. Применение Знание максимальной погрешности NMax для данного R позволяет нам рассчитать максимальное расстояние, на котором данным методом возможно первым же сканированием гарантированно отличить два блока с твердостями P1 и P2. Для этого требуется вычислить максимально допустимый шум N, при котором полученные со сканера значения точно не будут пересекаться. Получаем неравенство: P1 + N < P2 - N, имеем: N < (P2 - P1)/2. В итоге R = (P2 - P1)/(2*0.0606). Пример применения Допустим, мы хотим робота, добывающего нам алмазы. Для ускорения процесса средствами геосканера отличаем алмазную руду от камня, чтобы не тратить слишком много времени на его выкапывание. Дополнительное время могут занимать и лишние перемещения робота, а значит робот должен не путать руду с камнем и сканировать как можно большую площадь вокруг себя, следовательно подходящей фигурой для области сканирования будет цилиндр. Чтобы узнать его радиус и высоту, нужно узнать радиус описанной вокруг него сферы. Воспользуемся описанным выше методом: R = (3 - 1,5)/(2*0.0606) = 12.376 Алмазы генерируются до 16 высоты, а бедрок - до 5. Если руда не заспавнилась на 3 высоте, ниже копать скорее всего нечего. Отсюда высота цилиндра H = 16 - 3 = 13 блоков. Тогда максимальное расстояние до края цилиндра по вертикали h = (H - 1)/2. За теоремой Пифагора найдем радиус цилиндра r = (R^2 - h^2)^(1/2). Тогда за той же теоремой получаем, что r^2 = x^2 + y^2, где x и y - максимальные координаты сканирования относительно геосканера. Так мы узнаем, до каких x и y мы можем со 100% точностью отличить алмазную руду от камня. Сам эксперимент 1. Создавался кубоид 65*65*64 из обсидиана, так как это максимальная зона сканирования для геосканера. 2. Запихнул робота с геосканером в центр по горизонтали, на 33-ий блок по счету снизу по вертикали (можно было создать 33*33*33 и запихнуть робота в угол, но тогда надо будет определять, в какую сторону сканировать). 3. Загрузил в него с помощью дискеты программу, имеющую функцию "scan", которая многогратно сканирует один и тот же блок в определенных координатах, возвращает среднюю, минимальную и максимальную погрешность. local component = require "component" local io = require "io" local geolyzer = component.geolyzer local path = "/home/geoScanData.txt" local accuracy = 10 local hardness = geolyzer.analyze(3).hardness local radius = 32 local average, min, max = {}, {}, {} local function compareData (scanData, sum, min, max) local lMin, lMax = min, max if scanData < min then lMin = scanData end if scanData > max then lMax = scanData end return sum + scanData, lMin, lMax end local function scan(x, y, zMin, zMax, hardness, accuracy) local sum, min, max = 0, 2, 0 for i = 1, accuracy do local scanData = geolyzer.scan(x, y) for j = zMin, zMax do sum, min, max = compareData(math.abs(scanData[j]-hardness), sum, min, max) end end return sum/(accuracy*(zMax-zMin+1)), min, max end local function DGN(k, radius, x, y, z, hardness, accuracy) for i = 1, radius do average[i+k], min[i+k], max[i+k] = scan(i*x, i*y, 33-i*z, 33-i*z, hardness, accuracy) print(average[i+k].."\n"..min[i+k].."\n"..max[i+k].."\n"..i.."/"..radius.."/"..x+y+z.."\n") end end DGN(0, radius, 1, 0, 0, hardness, accuracy) DGN(radius, radius, 1, 1, 0, hardness, accuracy) DGN(radius*2, radius, 1, 1, 1, hardness, accuracy) print("Done!") file = io.open(path, "w") local len = #average for i = 1, len do file:write(average[i].."\n") end file:write("\n") for i = 1, len do file:write(min[i].."\n") end file:write("\n") for i = 1, len do file:write(max[i].."\n") end file:write("\n") io.close() Три вызова функции "DGN" вызывают функцию "scan" по порядку для каждого блока по определенной линии от робота до края кубоида. На изображении ниже робот находится в углу, а сканируемые блоки для первого, второго и третьего вызова окрашены в цвета, соответствующие окраскам номеров вызовов. Это сделано для того, чтобы проверить, можно ли вычислять расстояние до блока описанными выше формулами, влияет ли отклонение по нескольким осям на результат. В первом вызове проверяются блоки отдаленные только по одной оси, во втором - по двум, в третьем - по трем. Потом программа сохраняет все результаты в файл, после чего я ввожу данные в excel: GeolyzerNoise.xlsx. Первый график показывает зависимость максимальной погрешности от расстояния для 500 сканирований каждого блока. Таким образом расстояние до блока можно вычислять по указанной ранее формулой, результат не зависит от количества осей, по которым блок смещен относительно сканера. Отсюда я и получил константу 1/16.5 Второй график показывает то же самое для средних значений. Еще на нем видно, что даже 30 сканирований дают очень низкую точность, по этому вычислять твердость средним арифметическом невыгодно по затратам времени и энергии. Третий график показывает, что средняя арифметическая погрешность приблизительно в два раза меньше максимальной. Сам не знаю что с этим делать.
  5. 1 балл
    Встречный вопрос: зачем? Для руд плотности известны. Для других блоков, вряд-ли разрабы модов будут сильно фантазировать. Вот возможные плотности для последнего майна: 50 30 22.5 10 5 4 3 2.8 2.5 2 1.8 1.5 1.4 1.25 1 0.8 0.75 0.6 0.5 0.4 0.3 0.2 0.1 Нестандартные видел только в Galacticraft: 6 2.2 0.9
  6. 1 балл
    2D Принтер (v1.0.0) Пользуясь этой небольшой программой, вы сможете напечатать вывеску своей мечты! Правда, придётся немного посчитать... Установка: pastebin get 95SgeMBn 2d_printer.lua Любая буква состоит из одной или нескольких фигур. Каждая фигура - это параллелепипед толщиной в 1/16 блока. Он задаётся числом (X левой стороны) * 4096 + (ширина) * 256 + (Y нижней стороны) * 16 + (высота). Например, для печати буквы S надо последовательно набрать 16961, 17043, 25634, 25714, 25794, 41539, 41649. H - 16940, 25714, 41516. O - 16968, 25634, 25794, 41544. P - 16940, 25714, 25794, 41619. (К сожалению, числа для других букв ещё не рассчитаны. ) Наконец, чтобы отправить фрагмент вывески на печать, необходимо набрать 0 или 'print'. Программа начнёт печать, дождётся её завершения и закроется.
  7. 1 балл
    Здравствуйте, я - молдавский вирус. В виду бедности моего создателя и общей отсталости развития высоких технологий нашей страны, я не в силах причинить какой-либо вред вашему компьютеру. Пожалуйста, сотрите сами несколько самых нужных вам файлов, а затем разошлите меня по почте своим друзьям. Благодарю за понимание и сотрудничество.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...