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

Построение окружности

Вопрос

у меня вот какая проблема хочу в сингле с помощью OC генерировать сферы и рисовать круги на мониторах

но когда я запускаю код вместо круга на мониторе получается косая черта через весь монитор

math = require("math")
gpu = require("component").gpu
centerx = 15
centery = 15
for y=1,30 do
for x=1,30 do
distantion = math.sqrt(  ((centerx-x)*2)+((centery-y)*2)  )
if distantion < 15 then
gpu.setBackground(0xffffff)
else
gpu.setBackground(0x000000)
end
gpu.set(x,y," ")
end
end 

и как результат косая черта через квадрат 30x30 :facepalm:

так-же я пробовал дебажить и обнаружил что большинство вычислений дает результат -1.#IND (и как мне от этого избавиться?)

я делаю что-то не так или геометрия сильно изменилась за последний год?  :blink:

Изменено пользователем Larban

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Можно попробовать параметрически вычислить место точек при заданном радиусе и центре окружности. Так по идее можно строить дуги, окружности или овалы.

Я так строил черепашкой в своей программке Титан сферы и кольца, полусферы и прочее из блоков любого размера.

gpu = require("component").gpu
local term = require('term')
term.clear()


local  function circle( x0, y0, r, discret )
        for fi = 0 , 360, discret do
                x_draw = x0  +   r * 2 * math.cos (math.rad (fi))
                y_draw = y0  +   r * math.sin (math.rad (fi))
                gpu.set(x_draw, y_draw,"*")
                --os.sleep(0.1)
        end
end

circle( 40, 12, 10, 1 )

http://puu.sh/i2ir2/25edd90779.png

 

Какашка, конечно, при мониторе 80 на 25.  Что-то толково рисовать в ОС проблематично пока с текстовым режиме. Не вижу особого смысла.

 

Прим. 2-кой по X компенсировал овал монитора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

distantion = math.sqrt( ((centerx-x)*2)+((centery-y)*2) )

тут, наверное не *2, а ^2 или (centerx-x)*(centerx-x). Короче, в квадрат возводить надо, а не умножать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не понимаю, почему нельзя по гуглить??

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для рисования окружностей естьалгоритм Брезенхэма. А вообще на openprograms лежит библиотека для рисования различных фигур в текстовом режиме. Не нужно велосипедить.

Изменено пользователем KelLiN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вообще на openprograms лежит библиотека для рисования различных фигур в текстовом режиме.

Ссылку, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А причём здесь велосипед, если ты учил в школе умножение, это же не велосипед, так же и здесь, человеку интересно самому сделать такой алгоритм.

Изучить его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Наверное чтоб у кого то бомбануло  :D

Изменено пользователем Pitman

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...