![]() |
Эффект линзы
Имею исходник из 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 рассчитывается плюсы на минусы поменяй, либо у самого знак, либо под корнем плюсы на минусы". Забавно, но результат от этих изменений не меняется. :( |
попробуй
Z = M - SQR (R*R - X*X - Y*Y) |
слава - кинь результат что получается...
|
Везде, где есть вычисления вида A=SQR(B*B-C*C) (там где вычисляется Z, С*С=X*X+Y*Y), формулу надо поправить на: A=2(B-C)-SQR(B*B-C*C)
Правда подозреваю, что надо не везде, а только во втором вычислении. |
Если на фотографию Луны или на 3D-модель Луны посмотреть, то кратеры тоже часто кажутся не вогнутыми, а выпуклыми. Вогнутые они или выпуклые, решает мозг, на основе привычных представлений о мире. Линза и кратер таковыми не являются, видимо.
Добавлено через 1 минуту Да, улыбнуться забыл: :) |
Quote:
Z = SQR(R*R - X*X - Y*Y) заменть на? Z = 2*(X-Y) - SQR(X*X - Y*Y) ? получается что то вроде 4-х угольной звезды, но не линза. |
:smile: |
Quote:
// 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 |
Нее, все куда проще, мне нужно получить подобие линзы прямо на экране, из точек.
Вариант из IRIS работает не так, как раз потому что не рисует сразу на экран, а создает таблицу для приемника. |
Quote:
|
| All times are GMT +4. The time now is 20:56. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.