Смерть Жабы

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:проще заново написать, причём на чём угодно :)
есть такая штука - фиксированная точка
Да писать-то я без вопросов буду заново... но вот на чем угодно - не могу...
На сотовом у меня j2me cldc 1.1 midp 1.0 - в ней только целые в math.
В этом и суть вопроса.

Даже на z80 - я бы ни у кого спрашивать не стал...

А тут весь вопрос в том, чтобы посчитать "без дробей" и любых точек...
И привлекать библиотеку (а она есть) для "дробей" хотелось бы избежать...
А в фиксированной точке нет дробей :)
Там только сложение с вычитанием да побитовые сдвиги...
Я тут за главного - если что шлите мыло на me собака shaos точка net
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Lavr wrote:Так может все дробные - умножаем, к примеру, на 1000, считаем в целых, результат -
делим на 1000 и - на экран? А?
Описанное тобою -- это велосипед, под названием "fixed point", или фиксированная запятая(точка). Только умножают и делят, обычно на степень двойки, чтобы умножения и деления можно было бы заменить сдвигами. =)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Shaos вопрос вот такой...
Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
Shaos wrote:А в фиксированной точке нет дробей :)
Там только сложение с вычитанием да побитовые сдвиги...
Ярослав Гашек wrote:- Вы говорите, как будейовицкий жестяник Покорный. - твердил Швейк.
Тот, когда его спрашивали: "Купались ли вы в этом году в Мальше?" - отвечал: "Не купался, но зато в этом году будет хороший урожай слив".
А когда его спрашивали: "Вы уже ели в этом году грибы?" - он отвечал: "Не ел, но зато новый марокканский султан, говорят, весьма достойный человек".
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Я не сумлевался, что оракла рано или поздно умертвит жабёнка и это время уже близко
Lavr wrote:Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
Shaos wrote:Я не сумлевался, что оракла рано или поздно умертвит жабёнка и это время уже близко
Lavr wrote:Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
не так... не выдергивай фразы...
Lavr wrote:вопрос вот такой... серьёзный... пока Жаба ещё не умерла... :-?
Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
А Жаба ещё многих переживет... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:
Shaos wrote:Я не сумлевался, что оракла рано или поздно умертвит жабёнка и это время уже близко
Lavr wrote:Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
не так... не выдергивай фразы...
Lavr wrote:вопрос вот такой... серьёзный... пока Жаба ещё не умерла... :-?
Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
А Жаба ещё многих переживет... :-?
ну ты тоже пропустил пару фраз в нашем диалоге :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:ну ты тоже пропустил пару фраз в нашем диалоге :roll:
А они не по делу: не по вопросу, и не по теме топика здесь...
Какое мне дело до твоих отношений с множество Мандельброта и Z80 лет десять назад,
тем более в топике про Жабу? :roll:

Не продолжай... я решил проблему без излишней болтовни.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:ну ты тоже пропустил пару фраз в нашем диалоге :roll:
А они не по делу: не по вопросу, и не по теме топика здесь...
Какое мне дело до твоих отношений с множество Мандельброта и Z80 лет десять назад,
тем более в топике про Жабу? :roll:
дык ты сам начал про фиксированную точку - вот я тебе и привёл пример где она юзабельна...
Lavr wrote:Так может все дробные - умножаем, к примеру, на 1000, считаем в целых, результат - делим на 1000 и - на экран? А?
P.S. если ты ещё не понял то что ты описал она и есть (фиксированная точка), только не на 1000 надо умножать-делить, а на 1024 т.к. это умножение/деление легко заменяется на побитовый сдвиг - как правильно указал bar это работает для всех степеней двойки...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:если ты ещё не понял то что ты описал она и есть (фиксированная точка), только не на 1000 надо умножать-делить, а на 1024 т.к. это умножение/деление легко заменяется на побитовый сдвиг - как правильно указал bar это работает для всех степеней двойки...
Я давно всё понял, поскольку я сам так считал синус в целых числах...
И вовсе не обязательно на 1024... я на 65536 умножал...
Я только не пойму зачем ты мне объясняешь, что я сам и предложил... :lol:

От гуру по Джабе я предполагал другой ответ на простой вопрос:
Lavr wrote:Как ты думаешь - вот этот апплет можно повторить только в целочисленной арифметике?
1) да - можно. Попробуй вот так...
2) нет - не стоит выделки (потому что...)

Всё остальное - словоблудие, которое тем более не нужно сейчас, поскольку я и без объяснений
просто попробовал и сделал...

"Ложка от гуру" хороша к обеду, когда сомневаешься, делать так, или гуру подскажут тебе -
нет, есть вариант гораздо лучше...
Last edited by Lavr on 11 Aug 2012 14:42, edited 2 times in total.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Ну покажи чтоли что получилось ;)
Картинку хотя бы...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Да без проблем... на - смотри:

Image

Или ты синус хотел посмотреть?

Синус тоже недалеко был, чтобы тебе 2 раза не просить:

Image

Собственно сам синус реализован вот так:

Code: Select all

public class fn
{
 //----------- int 65535*Sin(w) (w - в градусах 0-359)
public static int tabSin[] = {
0, 1143, 2287, 3429, 4571, 5711, 6850, 7986, 9120, 10251,
11380, 12504, 13625, 14742, 15854, 16961, 18063, 19160, 20251, 21336,
22414, 23485, 24549, 25606, 26655, 27696, 28728, 29752, 30766, 31771,
32767, 33753, 34728, 35692, 36646, 37589, 38520, 39439, 40347, 41242,
42125, 42994, 43851, 44694, 45524, 46340, 47141, 47929, 48701, 49459,
50202, 50930, 51642, 52338, 53018, 53683, 54330, 54962, 55576, 56174,
56754, 57318, 57863, 58392, 58902, 59394, 59869, 60325, 60762, 61182,
61582, 61964, 62327, 62671, 62996, 63301, 63588, 63855, 64102, 64330,
64539, 64728, 64897, 65046, 65175, 65285, 65375, 65445, 65495, 65525,
65534, 65525, 65495, 65445, 65375, 65285, 65175, 65046, 64897, 64728,
64539, 64330, 64102, 63855, 63588, 63301, 62996, 62671, 62327, 61964,
61582, 61182, 60762, 60325, 59869, 59394, 58902, 58392, 57863, 57318,
56754, 56174, 55576, 54962, 54330, 53683, 53018, 52338, 51642, 50930,
50202, 49459, 48701, 47929, 47141, 46340, 45524, 44694, 43851, 42994,
42125, 41242, 40347, 39439, 38520, 37589, 36646, 35692, 34728, 33753,
32767, 31772, 30766, 29752, 28728, 27696, 26655, 25606, 24549, 23485,
22414, 21336, 20251, 19160, 18063, 16961, 15854, 14742, 13625, 12504,
11380, 10251, 9120, 7986, 6850, 5711, 4571, 3429, 2287, 1143,
0, -1143, -2287, -3429, -4571, -5711, -6850, -7986, -9120, -10251,
-11380, -12504, -13625, -14742, -15854, -16961, -18063, -19160, -20251, -21336,
-22414, -23485, -24549, -25606, -26655, -27696, -28728, -29752, -30766, -31771,
-32767, -33753, -34728, -35692, -36646, -37589, -38520, -39439, -40347, -41242,
-42125, -42994, -43851, -44694, -45524, -46340, -47141, -47929, -48701, -49459,
-50202, -50930, -51642, -52338, -53018, -53683, -54330, -54962, -55576, -56174,
-56754, -57318, -57863, -58392, -58902, -59394, -59869, -60325, -60762, -61182,
-61582, -61964, -62327, -62671, -62996, -63301, -63588, -63855, -64102, -64330,
-64539, -64728, -64897, -65046, -65175, -65285, -65375, -65445, -65495, -65525,
-65534, -65525, -65495, -65445, -65375, -65285, -65175, -65046, -64897, -64728,
-64539, -64330, -64102, -63855, -63588, -63301, -62996, -62671, -62327, -61964,
-61582, -61182, -60762, -60325, -59869, -59394, -58902, -58392, -57863, -57318,
-56754, -56174, -55576, -54962, -54330, -53683, -53018, -52338, -51642, -50930,
-50202, -49459, -48702, -47929, -47141, -46340, -45524, -44694, -43851, -42994,
-42125, -41242, -40347, -39439, -38520, -37589, -36646, -35692, -34728, -33753,
-32767, -31772, -30766, -29752, -28728, -27696, -26655, -25606, -24549, -23485,
-22414, -21336, -20251, -19160, -18063, -16961, -15854, -14742, -13625, -12504,
-11380, -10251, -9120, -7986, -6850, -5711, -4571, -3429, -2287, -1143
 };

 //----------- int 65535*Cos(w) (w - в градусах 0-359)
public static int tabCos[] = {
65535, 65525, 65495, 65445, 65375, 65285, 65175, 65046, 64897, 64728,
64539, 64330, 64102, 63855, 63588, 63301, 62996, 62671, 62327, 61964,
61582, 61182, 60762, 60325, 59869, 59394, 58902, 58392, 57863, 57318,
56754, 56174, 55576, 54962, 54330, 53683, 53018, 52338, 51642, 50930,
50202, 49459, 48701, 47929, 47141, 46340, 45524, 44694, 43851, 42994,
42125, 41242, 40347, 39439, 38520, 37589, 36646, 35692, 34728, 33753,
32767, 31771, 30766, 29752, 28728, 27696, 26655, 25606, 24549, 23485,
22414, 21336, 20251, 19160, 18063, 16961, 15854, 14742, 13625, 12504,
11380, 10251, 9120, 7986, 6850, 5711, 4571, 3429, 2287, 1143,
0, -1143, -2287, -3429, -4571, -5711, -6850, -7986, -9120, -10251,
-11380, -12504, -13625, -14742, -15854, -16961, -18063, -19160, -20251, -21336,
-22414, -23485, -24549, -25606, -26655, -27696, -28728, -29752, -30766, -31771,
-32767, -33753, -34728, -35692, -36646, -37589, -38520, -39439, -40347, -41242,
-42125, -42994, -43851, -44694, -45524, -46340, -47141, -47929, -48701, -49459,
-50202, -50930, -51642, -52338, -53018, -53683, -54330, -54962, -55576, -56174,
-56754, -57318, -57863, -58392, -58902, -59394, -59869, -60325, -60762, -61182,
-61582, -61964, -62327, -62671, -62996, -63301, -63588, -63855, -64102, -64330,
-64539, -64728, -64897, -65046, -65175, -65285, -65375, -65445, -65495, -65525,
-65534, -65525, -65495, -65445, -65375, -65285, -65175, -65046, -64897, -64728,
-64539, -64330, -64102, -63855, -63588, -63301, -62996, -62671, -62327, -61964,
-61582, -61182, -60762, -60325, -59869, -59394, -58902, -58392, -57863, -57318,
-56754, -56174, -55576, -54962, -54330, -53683, -53018, -52338, -51642, -50930,
-50202, -49459, -48701, -47929, -47141, -46340, -45524, -44694, -43851, -42994,
-42125, -41242, -40347, -39439, -38520, -37589, -36646, -35692, -34728, -33753,
-32767, -31772, -30766, -29752, -28728, -27696, -26655, -25606, -24549, -23485,
-22414, -21336, -20251, -19160, -18063, -16961, -15854, -14742, -13625, -12504,
-11380, -10251, -9120, -7986, -6850, -5711, -4571, -3429, -2287, -1143,
0, 1143, 2287, 3429, 4571, 5711, 6850, 7986, 9120, 10251,
11380, 12504, 13625, 14742, 15854, 16961, 18063, 19160, 20251, 21336,
22414, 23485, 24549, 25606, 26655, 27696, 28728, 29752, 30766, 31771,
32767, 33753, 34728, 35692, 36646, 37589, 38520, 39439, 40347, 41242,
42125, 42994, 43851, 44694, 45524, 46340, 47141, 47929, 48701, 49459,
50202, 50930, 51642, 52338, 53018, 53683, 54330, 54962, 55576, 56174,
56754, 57318, 57863, 58392, 58902, 59394, 59869, 60325, 60762, 61182,
61582, 61964, 62327, 62671, 62996, 63301, 63588, 63855, 64102, 64330,
64539, 64728, 64897, 65046, 65175, 65285, 65375, 65445, 65495, 65525
 };
     // - конструктор -
    public fn()
    {
    }
//--------------- вычисление int Sin
    public static int tSin(int ygol) // - в градусах.
    {
     int arg = ygol;
     if (arg < 360)
      {
       return tabSin[arg];
      }
      else
         {
          arg %= 360; // Оператор деления по модулю возвращает остаток
                      // от деления первого операнда на второй
          return tabSin[arg];
         }
    }
//--------------- вычисление int Cos
    public static int tCos(int ygol) // - в градусах.
    {
     int arg = ygol;
     if (arg < 360)
      {
       return tabCos[arg];
      }
      else
         {
          arg %= 360; // Оператор деления по модулю возвращает остаток
                      // от деления первого операнда на второй
          return tabCos[arg];
         }
    }
 }
Вызывается табличный синус вот так:

Code: Select all

// конструктор класса
public MyCanvas() {
  mathFun = new fn();

...
      //---------------------------------------------------
      // если нет функции SIN - то...
      // берем значение по таблице

        arg = (angle + movx)/1000;  // ошибка на длине экрана накапливается !
      int z = mathFun.tSin(arg);

      // System.out.println(" Sin(z) = "+z+"; z = "+angle); // это проверка значений

      // вычислить значение у по формуле
       int m = (amp * z) >> 16;
И если на предыдущем рисунке тебе синус маловатым будет, вот - покрупнее:

Image
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

дык лоренца на телефоне то запустил хоть?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:дык лоренца на телефоне то запустил хоть?
Да нет - только систему 3-х дифур в целочисленную арифметику перевёл...

Я лоренца и не буду в мобильник совать.

Немножко другая идея у меня, лоренц просто под руку попался как самый
доступный в инете объект... :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Да нет - только систему 3-х дифур в целочисленную арифметику перевёл...
А что-то меня вдруг поклинило там, где я не ожидал... :o
На 3-Де выводе графика! :lol: Глаз зацепился за формулу и вдруг подумалось:
"а что-то формула неправильная... нет синуса и косинуса..." :o

Думал быстро разберусь... ан нет! Поиск в инете говорит, что без ОупенГЛ,
ДиректХе, или левых длл никто изометрию на канве строить и не умеет! :roll:

Ну слава богу умные люди не перевелись... :lol:
Keith Peters wrote:А сейчас я вам открою страшный секрет: почти каждая игра, движок, рисунок, которые названы изометрическим, таковыми на самом деле не являются; они являются диметрическими, т.е. между тремя осями равны между собой только два угла (см рисунок 5).
Image
Здесь мы берем координаты x, y, z точки трехмерного пространства и вычисляем координаты sX и sY, которые определяют эту же точку на экране. Эти выражения представляют вращение точки вокруг оси у на 45 градусов и вокруг оси х на – 30 градусов.
Когда мы упростим наши выражения, мы получим следущее:

1 sx = x - z;
2 sy = y * 1.2247 + (x + z) * 0.5;


Некоторые реализации опускают значение 1.2247 и представляю координаты следующим образом:

1 x1 = x – z;
2 y1 = y + (x + z) * 0.5;


Это прекрасно работает, когда все объекты на сцене равны между собой по высоте. Кроме того, в простых системах все объекты находятся на одном уровне, поэтому у = 0 и его можно тоже опустить, тогда выражения примут следующий вид.

1 x1 = x – z;
2 y1 = (x + z) * 0.5;



Вот так! :o Иногда не надо излишне задумываться! А то случится, как с ёжиком
из анекдота, который "шел-шел, забыл как дышать и умер!" :D
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А между тем Firefox начал настоятельно рекомендовать своим юзерам отключить Java-плугин от шестой жабы...
Я тут за главного - если что шлите мыло на me собака shaos точка net