ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
752694 Топик полностью
Гудвин, волшебник (27.04.2017 22:25, просмотров: 367) ответил 1111111 на Ну дык! Поведай же в чем разница, в сути самой методы или тоже самое на каких то математических хитростях оптимизировали. Может там банально количество рассчетов в даблах разное вот и расхождение
Там целочисленная арифметика похоже. А "от латиноса" в даблах напрямую разруливает полигоны, ограниченные угловыми секундами. Вот она, эта круть:  public boolean contains(double x, double y) { if (npoints <= 2 || !getBoundingBox().contains(x, y)) { return false; } int hits = 0; int lastx = xpoints[npoints - 1]; int lasty = ypoints[npoints - 1]; int curx, cury; // Walk the edges of the polygon for (int i = 0; i < npoints; lastx = curx, lasty = cury, i++) { curx = xpoints[i]; cury = ypoints[i]; if (cury == lasty) { continue; } int leftx; if (curx < lastx) { if (x >= lastx) { continue; } leftx = curx; } else { if (x >= curx) { continue; } leftx = lastx; } double test1, test2; if (cury < lasty) { if (y < cury || y >= lasty) { continue; } if (x < leftx) { hits++; continue; } test1 = x - curx; test2 = y - cury; } else { if (y < lasty || y >= cury) { continue; } if (x < leftx) { hits++; continue; } test1 = x - lastx; test2 = y - lasty; } if (test1 < (test2 / (lasty - cury) * (lastx - curx))) { hits++; } } return ((hits & 1) != 0); }