?

Log in

No account? Create an account

Previous Entry | Next Entry

Прекрасная иллюстрация к тому, что такое настоящий хакер. В последнем номере TUGboat статья Дениса Рёгеля (Denis Roegel, Spheres, great circles and parallels, TUGboat, 30 (1), 80--87, 2009). Он рисовал параллели и большие круги на сфере в программе METAPOST, и для точного построения ему нужна была трехмерная векторная алгебра. Но в METAPOSTе нет типа данных "трехмерный вектор". Рёгель заметил, что программа умеет раскрашивать рисунки, и цвет точки задается тремя параметрами в пространстве rgb (т.е. смешением красного, зеленого и синего). После чего он спокойно пишет:

let vector=color;
let Xp=redpart; let Yp=greenpart; let Zp=bluepart;

def dotproduct (expr Vi, Vj)=
  (Xp(Vi)*Xp(Vj) + Yp(Vi)*Yp(Vj) + Zp(Vi)*Zp(Vj))
enddef;

def vecproduct (expr Vi, Vj) =
  (Yp(Vi)*Zp(Vj)-Zp(Vi)*Yp(Vj),
   Zp(Vi)*Xp(Vj)-Xp(Vi)*Zp(Vj),
   Xp(Vi)*Yp(Vj)-Yp(Vi)*Xp(Vj))
enddef;

def norm(expr V) = sqrt(dotproduct(V,V)) enddef;
def normed(expr V) = (V/norm(V)) enddef;

и дальше строит свои чертежи.

Вот это и есть Настоящее Хакерство(TM).

Tags:

Comments

( 32 comments — Leave a comment )
slobin
Sep. 6th, 2009 06:27 pm (UTC)
В скриптовом язычке Second Life тип vector используется и для пространственных векторов, и для цветов в RGB. Что ещё интереснее, сетка точек для описания трёхмерной поверхности импортируется в игру в формате tga или png (картинки), как серия троек чисел (может, с тех пор, как я там последний раз был, и другие lossless форматы стали понимать). Если смотреть на такие "картинки" как на картинки, выглядят очень характерно. Ну и для многих программ 3D моделирования написали плагины для экспорта в таком вот виде.

... Страшнее ведьмы только ведьма под рутом ...

jedal
Sep. 6th, 2009 06:32 pm (UTC)
> Рёгель заметил
Ну это хорошо известный [в узких кругах] хак, да.
_shadow__
Sep. 6th, 2009 06:38 pm (UTC)
color 48-битный?
scholar_vit
Sep. 6th, 2009 07:11 pm (UTC)
Три действительных числа от 0 до 1, каждое, насколько я понимаю, double precision. По IEEE 754-2008 получается 156 бит (по 52 бита на мантиссу)
_shadow__
Sep. 6th, 2009 07:16 pm (UTC)
А! ну тогда вообще было бы грех не
rwalk
Sep. 6th, 2009 06:56 pm (UTC)
Интересно, есть ли глубокий смысл в совпадении размерностей цветового и физического пространств?
regent
Sep. 6th, 2009 07:04 pm (UTC)
Нет.
scholar_vit
Sep. 6th, 2009 07:18 pm (UTC)
Есть животные с двух, трех и четырехмерными цветовыми пространствами. Грубо говоря, сколько типов рецепторов - столько и измерений у цветового пространства. У стоматоподов их аж 12 :)

см. http://en.wikipedia.org/wiki/Color_vision#In_other_animals
xottabych
Sep. 7th, 2009 01:32 am (UTC)
Очевидно, у животных, которые сохраняют картинки в гамме CMYK, цветовое пространство четырехмерное?.. :-)

На самом деле количество типов рецепторов и количество базовых цветов в гамме, используемой в производственных целях, совпадать совершенно не обязано. Ну любил Гёте число 3, что поделаешь.
_shadow__
Sep. 6th, 2009 07:18 pm (UTC)
у дальтоников они не совпадают. Ну и, наверное, у быков : )
bgmt
Sep. 6th, 2009 08:58 pm (UTC)
Нет. Потому что физическое пространство 3+1-мерно.
Впрочем, не только потому.
juan_gandhi
Sep. 7th, 2009 04:06 am (UTC)
Физическое пространство хрен знает сколько-мерно. Добавим спиновые размерности. Добавим размерности импульса. И т.д.
bgmt
Sep. 7th, 2009 05:15 pm (UTC)
Ну не будем о струнах! Наблюдаемое физическое пространство 3+1-мерно, что там куда свернулось в планковском масштабе, глазами не видно. Что же до размерностей импульса, то мы о конфигурационном пространстве, а не о фазовом. У фазового всё же очень другие свойства. Начиная с отсутствия трансляционной инвариантности по импульсу.
faceted_jacinth
Sep. 10th, 2009 08:42 pm (UTC)
Плюс мы всё-таки на самом деле воспринимаем цвет света как четырёхмерный вектор. Есть же палочки ещё, и при низкой освещённости они становятся основными.

Меня почему-то радует то, что матрицы в разных дешёвых камерах, например, в мобильниках, устроены по тому же принципу, с четыремя типами рецепторов. Причём тот, который хорошо видит освещённость, не закрыт фильтром и поэтому отлично видит инфракрасный свет, от пультов дистанционного управления или новых оптических мышек. Телефон его интерпретирует как бело-голубой, что характерно, так же как глаз -- свет недостаточной яркости.
kouzdra
Sep. 6th, 2009 08:50 pm (UTC)
Это какой-то примитивный хак. Из серии, "как очевидно можно, но без острой нужды не стоит"
kondybas
Sep. 6th, 2009 09:39 pm (UTC)
Рёгель мыслит в терминах предметной области, а код - лишь инструмент. Бóльшая часть знакомых мне кодеров оперирует в терминах языка, а язык - штука всегда достаточно бессмысленная. Глокая куздра - извините за аллюзию.
bgmt
Sep. 6th, 2009 08:56 pm (UTC)
Это гениально.
Завидую, потому что, наверно, я б не догадался.
ygam
Sep. 6th, 2009 10:00 pm (UTC)
Использование GPU для неграфических расчетов - многомиллионная индустрия.

http://en.wikipedia.org/wiki/GPGPU
dmpogo
Sep. 6th, 2009 11:16 pm (UTC)
Всяко, NVIDIA продает GPU карты без видео выхода.
_glav_
Sep. 6th, 2009 10:47 pm (UTC)
а чем первые две строчки отличаются от объявления типа
vector = array[3]
Xp=vector(1); Yp=vector(2); Zp=vector(3);

если все необходимые векторыные операции всё равно определяются вручную?
т.е. в чём цимес использования rgb?
scholar_vit
Sep. 7th, 2009 06:18 pm (UTC)
А Вы попробуйте скомпилировать это на mp.
_glav_
Sep. 7th, 2009 06:46 pm (UTC)
простите, я METAPOST не знаю: то, что я привёл было псевдокодом, а не MP-кодом.

Я правильно понимаю, что, в таком случае, этот "хак" - "языковой", а не алгоритмический?
scholar_vit
Sep. 7th, 2009 06:54 pm (UTC)
Да, это использование языка (MP) в области, для которой он не был изначально предназначен.
juan_gandhi
Sep. 6th, 2009 11:17 pm (UTC)
Гениально!!!
aafin
Sep. 7th, 2009 04:04 am (UTC)
Хм. Там же есть mp3d?
scholar_vit
Sep. 7th, 2009 06:22 pm (UTC)

А Вы угадайте, кто её написал :)

http://www.ctan.org/tex-archive/graphics/metapost/contrib/macros/3d/
sergeyr
Sep. 7th, 2009 06:49 am (UTC)
Я когда-то по ленности своей сделал трёхслойную карту - первый слой был нормальный визуальный (как оно должно на экране отображаться), во втором в цвета загнал плотности трёх катрографировавшихся элементов в почве, а третий использовал - таки да - как массив координат прицеплённых к этой карте объектов. Собственно, к идее третьего слоя я тогда пришёл через второй, так что меня-тогдашнего можно назвать полухакером. B-)
kmmbvnr
Sep. 7th, 2009 09:30 am (UTC)
Встречал людей, которые искренне считают, что хакерство это когда пишешь вот так:
def dotproduct (expr Vi, Vj)=
  (redpart(Vi)*redpart(Vj) + greenpart(Vi)*greenpart(Vj) + bluepart(Vi)*bluepart(Vj))
enddef;

begemotv2718
Sep. 7th, 2009 11:29 am (UTC)
В последнем номере TUGboat? Странно, вроде бы довольно старый метапостовский хак.
scholar_vit
Sep. 7th, 2009 06:32 pm (UTC)
Возможно, хак и старый - но я узнал о нем из последней статьи, которая в общем-то не столько про этот хак, сколько про совсем другие вещи.
xgrbml
Sep. 7th, 2009 12:41 pm (UTC)
Подумаешь! Ну я так делал, когда надо было рисовать двумерные проекции каких-то трехмерных фиговин. Даже хаком назвать рука не поднимается.
cema
Sep. 8th, 2009 05:32 am (UTC)
Вроде элементарно, но... чёрт его знает.

Вся наша программистская жизнь сплошные такие хаки. Хак как подвиг: затыкание дыр в чьём-то головотяпстве.
( 32 comments — Leave a comment )

Profile

knot
scholar_vit
scholar_vit

Latest Month

September 2017
S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930

Tags

Powered by LiveJournal.com
Designed by Paulina Bozek