Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Эффект линзы

  1. #1
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Эффект линзы

    Имею исходник из IRIS но если им рисовать сразу на экран, то линза получается вогнутая, а хотелось бы обратного эффекта.

    Что для этого нужно поменять?

    R = 64 (радиус)
    M = 30 (выпуклость)
    S = SQR(R*R - M*M)

    FOR Y = -R TO R Step 4
    FOR X = -R TO R Step 4
    IF (X*X + Y*Y) >= S*S THEN
    A = X
    B = Y

    Else
    Z = SQR(R*R - X*X - Y*Y)
    A = INT(X * M / Z)
    B = INT(Y * M / Z)
    PLOT(A,B)

    END If

    NEXT X
    NEXT Y

    Крутые кодеры, вплоть до Sairoos советуют слудущее " где z рассчитывается плюсы на минусы поменяй, либо у самого знак, либо под корнем плюсы на минусы". Забавно, но результат от этих изменений не меняется.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    попробуй
    Z = M - SQR (R*R - X*X - Y*Y)
    Все любят гипножабу

  4. #3
    Guru Аватар для rasmer
    Регистрация
    20.01.2005
    Адрес
    Саранск
    Сообщений
    2,195
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    слава - кинь результат что получается...
    Мои интры: [Kukarachess][Super boot rmx][tRUSHE MOSAIc][BLAZE]
    Мои игры: [Overload][Removal]

    Список игр для ZX-Spectrum: [2015] [2014]

  5. #4
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Везде, где есть вычисления вида A=SQR(B*B-C*C) (там где вычисляется Z, С*С=X*X+Y*Y), формулу надо поправить на: A=2(B-C)-SQR(B*B-C*C)

    Правда подозреваю, что надо не везде, а только во втором вычислении.

  6. #5
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если на фотографию Луны или на 3D-модель Луны посмотреть, то кратеры тоже часто кажутся не вогнутыми, а выпуклыми. Вогнутые они или выпуклые, решает мозг, на основе привычных представлений о мире. Линза и кратер таковыми не являются, видимо.

    Добавлено через 1 минуту
    Да, улыбнуться забыл:
    Последний раз редактировалось Vladimir Kladov; 08.06.2008 в 15:22. Причина: Добавлено сообщение
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  7. #6
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Везде, где есть вычисления вида A=SQR(B*B-C*C) (там где вычисляется Z, С*С=X*X+Y*Y), формулу надо поправить на: A=2(B-C)-SQR(B*B-C*C)

    Правда подозреваю, что надо не везде, а только во втором вычислении.
    Мысль интересная, только с ABC ты меня совсем запутал.

    Z = SQR(R*R - X*X - Y*Y)

    заменть на?

    Z = 2*(X-Y) - SQR(X*X - Y*Y) ?

    получается что то вроде 4-х угольной звезды, но не линза.

  8. #7
    Activist Аватар для Raider
    Регистрация
    24.06.2005
    Адрес
    novosibirsk
    Сообщений
    266
    Записей в дневнике
    5
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Smile



    Alex Raider, Flash inc. 1992-1997 Новосибирск

  9. #8
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    Мысль интересная, только с ABC ты меня совсем запутал.
    Блин, на самом деле там все гораздо проще должно быть. X & Y у тебя пробегают по какой картинке? Источник или приемник? Если источник, то это по идее неправильно, ибо на приемнике получаем множество перерисованных и пропущенных пикселов. Отсюда мораль, что алгоритм должен работать следующим образом:

    // src, dst- графические контексты источника и приемника соотвецно
    // координаты относительно центра "линзы"
    // шаг 1 ибо идем по пикселам контекста назначения (хоть сдвигами биты заполнять, не суть важно)
    FOR Y = -R TO R
    FOR X = -R TO R
    // если вышли за пределы "линзы" (она круглая, но сканируем квадратом), то просто копируем точку как есть
    // т.е. координаты совпадают
    IF (X*X + Y*Y) >= S*S THEN
    A = X
    B = Y
    Else
    // иначе вычисляем координаты точки на источнике, которая проецируется на текущую точку приемника
    Z = SQR(R*R - X*X - Y*Y)
    A = INT(X * M / Z)
    B = INT(Y * M / Z)
    END If
    // просто проверка на установленный бит
    If (Point(src, A, B))
    PLOT(dst, X,Y)
    endif
    NEXT X
    NEXT Y

  10. #9
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Вариант из IRIS работает не так, как раз потому что не рисует сразу на экран, а создает таблицу для приемника.

  11. #10
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    Нее, все куда проще, мне нужно получить подобие линзы прямо на экране, из точек.
    Я про это и говорю. Сканирование должно быть линейным на приемнике, а не на источнике. Иначе будет хреново. А рисовать результат сразу или заполнять таблицу- не суть важно.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Классный эффект в демке !
    от AAA в разделе Демо
    Ответов: 9
    Последнее: 24.05.2008, 19:17
  2. Border-эффект на Бейсике
    от jim в разделе Разный софт
    Ответов: 7
    Последнее: 18.04.2007, 21:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •