Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: радар  (Прочитано 16372 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nascar
Новенький

ua
Offline Offline

« : 09-05-2011 17:03 » 

Привет всем!
Мне тут задали написать программу, не могли бы вы....))))
правила https://forum.shelek.ru/index.php/topic,8855.0.html читал)))
так вот суть в том чтоб на ассемблере написать программу типа авиа радара....
добрые люди помогли немного и сам немного поработал, но вот чет не получается немного...
программа должна находить и подсвечивать точку, с чем она успешно справляется, но когда делаешь вторую точку, то она подсвечивается в то же время что и первая.... нужно сделать так чтоб они подсвечивались в разное время.....заранее спасибо
Код:
org 100h
mov  ax,13h
int  10h
 
;очищаем видеобуффер
mov  di,screen
mov  cx,16000
xor  eax,eax
rep  stosd
 
push 0A000h
pop  es
 
;устанавливаем палитру (63 градации зелёного)
mov  cx,127
@@:mov  dx,3C8h
   mov  ax,cx
   out  dx,al
   inc  dx
   xor  al,al
   out  dx,al
   cmp  cx,63
   cmc
   sbb  ax,ax
   or   ax,cx
   out  dx,al
   xor  al,al
   out  dx,al
loop @b
 
fldz
main:fadd    [x]
     fld     st0
     fsincos
     fmul    [aspectratio] ;чтобы получился круг нужно учитывать отношение высоты к ширине (240/320=0.75)
     fxch    st1
 
     ;рисуем линию
     fldz
     fldz
     mov  cx,120
     @@:fadd st0,st2
        fist word[esp-4]
        fxch st1
        fadd st0,st3
        fist word[esp-2]
        fxch st1
        imul di,[esp-2],320
        add  di,[esp-4]
        mov  byte[screen+di+32160],63
       
        mov  si,6304
cmp  di,-6304

       
        jne  skip


         mov  word[screen+di+32160+320],7F7Fh
         mov  dword[screen+di+32160+639],7F7F7F7Fh
         mov  dword[screen+di+32160+959],7F7F7F7Fh
         mov  word[screen+di+32160+1280],7F7Fh

         mov  word[screen+si+32160+320],7f7Fh
         mov  dword[screen+si+32160+639],7f7F7F7Fh
         mov  dword[screen+si+32160+959],7f7F7F7Fh
         mov  word[screen+si+32160+1280],7f7Fh
        skip:
    loop @b
 
    fstp st0
    fstp st0
    fstp st0
    fstp st0
 
    ;затухание цвета
    mov  di,63999
    @@:sub  byte[screen+di],1
       adc  byte[screen+di],0
       dec  di
    jne @b
 
    ;ожидание обратного вертикального хода луча
    mov  dx,3DAh
    @@:in   al,dx
       test al,8
    je @b
 
    ;копируем видеобуффер на экран
    mov  si,screen
    xor  di,di
    mov  cx,16000
    rep  movsd
 
    ;если нажат escape - выход
    in   al,60h
    dec  al
jne main
 
ret
x           dd 0.007
aspectratio dd 0.75
screen:
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-05-2011 20:03 » 

nascar, тут либо нарушение синтаксиса, либо я что-то уже забыл: метки должны быть в начале строки, а не где угодно и, соотв., мнемоники не должны стоять в начале строки.

Предлагаю начать с алгоритма и описания задачи. Не мог бы ты описать это формулами? Ведь тут простая математика, а разбираться в движениях стека FPU - занятие муторное.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 09-05-2011 20:06 » 

Не, Ром, все верно... Это такой способ форматирования кода. (кстати, впервые вижу...)

затрудняюсь что-либо сказать по поводу
@@:

loop @b
« Последнее редактирование: 09-05-2011 20:09 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-05-2011 20:19 » 

@@ - фишка, чтобы не придумывать имена меткам, когда они (имена) не имеют смысла. Соотв., @b - ближайшая метка @@ ниже (по адресу).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
nascar
Новенький

ua
Offline Offline

« Ответ #4 : 10-05-2011 19:23 » 

ну я считаю что что нужно сначала описать метод прорисовки окружности....
допустим у нас есть окружность какого-то определенного адреса R и есть центр окружности, который расположен в центре экрана... ну в си это представляется как mid x и mid y ну назовем её Хо и Уо
тогда нахождение точки на окружности рассчитывается по формуле { X=Xo+R*cos a ; Y=Yo+R*sin a} при 0<a<2pi. ну вот теперь нужно сделать  цикл, который будет выполнятся от 0 до 2pi,  то есть до 6.28, ну пусть с шагом 0.05... это 126 шагов....
ну вот как сделать так чтоб при пересечении линии которая находит на точку точка подсвечивалась....
ну и соответственно угасание постепенно.... простите пока еще не научился.....
сорри если что нетак я только учусь....
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 10-05-2011 20:05 » 

Как по мне, есть ошибка в подходе к задаче.

Основная задача - обнаружение цели в пространстве
Радар излучает сигнал и принимает отраженный.

Радар имеет дальность обнаружения цели - максимальный радиус.
Как обнаружить цель?

Начнем с дальнего обнаружения цели.
Нужно рассчитать   количество точек на максимальном расстоянии, т.е длину максимальной окружности.
И рисовать отрезок от центра до точки обнаружения. В случае появления сигнала - вывести на экран.

теперь описываем алгоритм

0 градусов
Сигнал подан
Ответ есть?
Да - засветка
Нет - увеличиваем угол, в данном случае на ... рассчитать дельту.

Недостаток приведенного алгоритма - не учтена волнообразная составляющая радио сигнала, также не учтены и лепестки излучения.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
nascar
Новенький

ua
Offline Offline

« Ответ #6 : 10-05-2011 20:18 » 

в общем идею вашу понял

Цитата
рисовать отрезок от центра до точки обнаружения. В случае появления сигнала - вывести на экран.

теперь описываем алгоритм

0 градусов
Сигнал подан
Ответ есть?
Да - засветка
Нет - увеличиваем угол, в данном случае на ... рассчитать дельту.

думаю что углубляться в прочие подробности не имеет смысла, поскольку это не курсовой проект и не дипломная работа.... поэтому достаточно простой модели, которая бы вращала стрелку по кругу и обнаруживала объекты, которые  подсвечиваются...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-05-2011 21:28 » 

Хотя....
можно, и по другому, дабы не рассчитывать количество точек

Действовать по принципу волны
Отправная точка - центр
Рисуем окружность радиус 1
и так до максимальной.

Мне кажется так будет проще.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 11-05-2011 03:48 » 

nascar, в чем смысл задачи? Это анимация "под радар" или имитация настоящего радара? Подход разным будет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-05-2011 04:01 » 

RXL, анимация под радар.

nascar, ты C/C++ знаешь? Напиши решение, где вывод на экран, тест обратного хода луча и т.п. - ассемблер, а все остальные части (алгоритм решения) на C/C++. Псевдокод такой. Потом тебе помогут перевести алгоритм на ассемблер.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 11-05-2011 07:07 » 

Если вспомнить принцип отображения старых радаров, он основан на инерции люминофора. Вращающаяся линия имеет некую небольшую яркость. Точки "объектов" - яркие. Точки экрана за линией гаснут по некой формуле. Т.к. ближе к центру меньше точек, чем у края, то линия должна иметь градиент. Лучше даже будет, если линию заменить очень острым треугольником. Затухание яркости происходит для всех точек картинки.
По моему разумению получается следующие действия в цикле:
1. Выполнить понижение яркости экрана.
2. Нарисовать треугольник с градиентом. Лучше всего, если будет не установка пикселей, а смешивание - случайно не сотрется "обнаруженный объект".
3. Если есть "объект", нарисовать его фрагмент в рамках того же треугольника.
4. Изменить угол линии.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 11-05-2011 08:40 » 

RXL, а по-моему тут нужен массив объектов. Что касается затухания, то его величина есть функция (например, линейная) от угла между объектом и сканирующим лучом. Останется только в каждом кадре менять угол луча и рисовать всё, исходя из угла.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 11-05-2011 09:09 » 

Почему мне не понравилось сканирование лучом?
Нужно хранить координаты каждой точки максимальной окружности

Сканирование окружностью хранения этих данных не требует.

Засветку можно организовать след образом.
Объект - точка (координаты, интенсивность)
Вокруг точки - (координаты, интенсивность)

Таким образом Цель можно представить в виде множества точек(объектов)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
nascar
Новенький

ua
Offline Offline

« Ответ #13 : 11-05-2011 18:53 » 

эти идеи мне все нравятся....
и тот код что я выложил сначала для фасм мне подходит, единственное что мне нужно сделать 2 точки которые вовремя загораются...
хотя все Ваши идеи интересны, но боюсь мне просто не хватит время на их реализацию(((
фасм можно взять тут
« Последнее редактирование: 11-05-2011 20:59 от Джон » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 11-05-2011 20:36 » 

nascar, просто прикладывай файлы к посту. Всякие публичные хранилища неудобны в принципе (тормозные) и через некоторое время удаляют файлы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 11-05-2011 21:07 » new

Цитата
но боюсь мне просто не хватит время на их реализацию(((
А я боюсь, что никто из нас за тебя эту работу делать не будет.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines