F.9. cube
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑеализÑÐµÑ Ñип даннÑÑ
cube Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¼ÐµÑнÑÑ
кÑбов.
F.9.1. СинÑакÑиÑ
РТаблиÑе F.2 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð²Ð½ÐµÑние пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñипа cube. ÐÑÐºÐ²Ñ x, y и Ñ. д. обознаÑаÑÑ ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
ТаблиÑа F.2. ÐнеÑние пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÑбов
| ÐнеÑний ÑинÑакÑÐ¸Ñ | ÐнаÑение |
|---|---|
| ÐдномеÑÐ½Ð°Ñ ÑоÑка (или одномеÑнÑй инÑеÑвал нÑлевой длинÑ) |
( | То же, ÑÑо и вÑÑе |
| ТоÑка в n-меÑном пÑоÑÑÑанÑÑве, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²Ð½ÑÑÑи как кÑб нÑлевого обÑÑма |
( | То же, ÑÑо и вÑÑе |
( | ÐдномеÑнÑй инÑеÑвал, наÑинаÑÑийÑÑ Ð² ÑоÑке x и заканÑиваÑÑийÑÑ Ð² y, либо наобоÑоÑ; поÑÑдок знаÑÐµÐ½Ð¸Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ |
[( | То же, ÑÑо и вÑÑе |
( | N-меÑнÑй кÑб, пÑедÑÑавленнÑй паÑой диагоналÑно пÑоÑивоположнÑÑ Ñглов |
[( | То же, ÑÑо и вÑÑе |
Ркаком поÑÑдке вводÑÑÑÑ Ð¿ÑоÑивоположнÑе ÑÐ³Ð»Ñ ÐºÑба, не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ. ФÑнкÑии, пÑинимаÑÑие Ñип cube, авÑомаÑиÑеÑки менÑÑÑ ÑÐ³Ð»Ñ Ð¼ÐµÑÑами, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÐµÐ´Ð¸Ð½Ð¾Ðµ внÑÑÑеннее пÑедÑÑавление «левÑй нижний â пÑавÑй веÑÑ
ний». Ðогда ÑÑи ÑÐ³Ð»Ñ ÑовмеÑаÑÑÑÑ, в cube Ð´Ð»Ñ Ñкономии пÑоÑÑÑанÑÑва Ñ
ÑаниÑÑÑ ÑолÑко один Ñгол Ñ Ñлагом «ÑвлÑеÑÑÑ ÑоÑкой».
ÐÑобелÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ, Ñак ÑÑо [( не оÑлиÑаеÑÑÑ Ð¾Ñ x),(y)][ ( .x ), ( y ) ]
F.9.2. ТоÑноÑÑÑ
ÐнаÑÐµÐ½Ð¸Ñ Ñ ÑанÑÑÑÑ Ð²Ð½ÑÑÑи как 64-биÑнÑе ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой. ÐÑо знаÑиÑ, ÑÑо ÑиÑла Ñ Ð±Ð¾Ð»ÐµÐµ Ñем 16 знаÑаÑими ÑиÑÑами бÑдÑÑ ÑÑекаÑÑÑÑ.
F.9.3. ÐÑполÑзование
РТаблиÑе F.3 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾Ð¿ÐµÑаÑоÑÑ, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑабоÑÑ Ñ Ñипом cube.
ТаблиÑа F.3. ÐпеÑаÑоÑÑ Ð´Ð»Ñ ÐºÑбов
| ÐпеÑаÑÐ¾Ñ | РезÑлÑÑÐ°Ñ | ÐпиÑание |
|---|---|---|
a = b | boolean | ÐÑÐ±Ñ a и b иденÑиÑнÑ. |
a && b | boolean | ÐÑÐ±Ñ a и b пеÑеÑекаÑÑÑÑ. |
a @> b | boolean | ÐÑб a вклÑÑÐ°ÐµÑ ÐºÑб b. |
a <@ b | boolean | ÐÑб a вклÑÑÑн в кÑб b. |
a < b | boolean | ÐÑб a менÑÑе кÑба b. |
a <= b | boolean | ÐÑб a менÑÑе или Ñавен кÑÐ±Ñ b. |
a > b | boolean | ÐÑб a болÑÑе кÑба b. |
a >= b | boolean | ÐÑб a болÑÑе или Ñавен кÑÐ±Ñ b. |
a <> b | boolean | ÐÑб a не Ñавен кÑÐ±Ñ b. |
a -> n | float8 | ÐÑдаÑÑ n-нÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ ÐºÑба (ÑÑиÑÐ°Ñ Ñ 1). |
a ~> n | float8 | ÐÑдаÑÑ n-нÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ ÐºÑба ÑледÑÑÑим обÑазом: n = 2 * k - 1 обознаÑÐ°ÐµÑ Ð½Ð¸Ð¶Ð½ÑÑ Ð³ÑаниÑÑ k-Ñой ÑазмеÑноÑÑи, n = 2 * k обознаÑÐ°ÐµÑ Ð²ÐµÑÑ
нÑÑ Ð³ÑаниÑÑ k-Ñой ÑазмеÑноÑÑи. ÐÑÑиÑаÑелÑнÑе n обознаÑаÑÑ Ð¾Ð±ÑаÑное знаÑение ÑооÑвеÑÑÑвÑÑÑей положиÑелÑной кооÑдинаÑÑ. ÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿ÑедназнаÑен Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки KNN-GiST. |
a <-> b | float8 | Ðвклидово ÑаÑÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ a и b. |
a <#> b | float8 | РаÑÑÑоÑние гоÑодÑÐºÐ¸Ñ ÐºÐ²Ð°ÑÑалов (меÑÑика L-1) Ð¼ÐµÐ¶Ð´Ñ a и b. |
a <=> b | float8 | РаÑÑÑоÑние ЧебÑÑева (меÑÑика L-inf) Ð¼ÐµÐ¶Ð´Ñ a и b. |
(Ðо веÑÑии PostgreSQL 8.2 опеÑаÑоÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ @> и <@ обознаÑалиÑÑ ÑооÑвеÑÑÑвенно как @ и ~. ÐÑи имена по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð´ÐµÐ¹ÑÑвÑÑÑ, но ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими и в конÑе конÑов бÑдÑÑ ÑпÑаздненÑ. ÐамеÑÑÑе, ÑÑо ÑÑаÑÑе имена пÑоизоÑли из ÑоглаÑениÑ, коÑоÑÐ¾Ð¼Ñ ÑанÑÑе Ñледовали клÑÑевÑе геомеÑÑиÑеÑкие ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
!)
СкалÑÑнÑе опеÑаÑоÑÑ ÑпоÑÑдоÑÐ¸Ð²Ð°Ð½Ð¸Ñ (<, >= и Ñ. д.) не имеÑÑ Ð±Ð¾Ð»ÑÑого ÑмÑÑла ни Ð´Ð»Ñ ÐºÐ°ÐºÐ¸Ñ
пÑакÑиÑеÑкиÑ
Ñелей, кÑоме ÑоÑÑиÑовки. ÐÑи опеÑаÑоÑÑ ÑнаÑала ÑÑавниваÑÑ Ð¿ÐµÑвÑе кооÑдинаÑÑ Ð¸ еÑли они ÑавнÑ, ÑÑавниваÑÑ Ð²ÑоÑÑе и Ñ. д. Ðни пÑедназнаÑÐµÐ½Ñ Ð² оÑновном Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки клаÑÑа опеÑаÑоÑов индекÑа-B-деÑева Ð´Ð»Ñ Ñипа cube, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, напÑимеÑ, еÑли Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ Ð¾Ð³ÑаниÑение UNIQUE Ð´Ð»Ñ ÑÑолбÑа Ñипа cube.
ÐодÑÐ»Ñ cube Ñакже пÑедоÑÑавлÑÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов индекÑа GiST Ð´Ð»Ñ Ð·Ð½Ð°Ñений cube. ÐÐ½Ð´ÐµÐºÑ GiST Ð´Ð»Ñ cube Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка знаÑений в вÑÑажениÑÑ
Ñ Ð¾Ð¿ÐµÑаÑоÑами =, &&, @> и <@ в пÑедложениÑÑ
WHERE.
GiST-Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ cube Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ и Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ближайÑиÑ
ÑоÑедей Ñ Ð¸ÑполÑзованием опеÑаÑоÑов меÑÑики <->, <#> и <=> в пÑедложениÑÑ
ORDER BY. ÐапÑимеÑ, ближайÑего ÑоÑеда ÑоÑки в ÑÑÑÑ
меÑном пÑоÑÑÑанÑÑве (0.5, 0.5, 0.5) можно ÑÑÑекÑивно найÑи Ñак:
SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;
ÐпеÑаÑÐ¾Ñ ~> Ð¼Ð¾Ð¶ÐµÑ Ñакже иÑполÑзоваÑÑÑÑ Ñаким обÑазом, ÑÑÐ¾Ð±Ñ ÑÑÑекÑивно вÑдаваÑÑ Ð¿ÐµÑвÑе неÑколÑко знаÑений, оÑÑоÑÑиÑованнÑÑ
по вÑбÑанной кооÑдинаÑе. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿ÐµÑвÑе неÑколÑко кÑбов, ÑпоÑÑдоÑеннÑÑ
по возÑаÑÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑвой кооÑдинаÑÑ (левого нижнего Ñгла), можно иÑполÑзоваÑÑ ÑледÑÑÑий запÑоÑ:
SELECT c FROM test ORDER BY c ~> 1 LIMIT 5;
Ð ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð²ÑмеÑнÑе кÑбÑ, оÑÑоÑÑиÑованнÑе по ÑбÑÐ²Ð°Ð½Ð¸Ñ Ð¿ÐµÑвой кооÑдинаÑÑ Ð¿Ñавого веÑÑ Ð½ÐµÐ³Ð¾ Ñгла:
SELECT c FROM test ORDER BY c ~> 3 DESC LIMIT 5;
РТаблиÑе F.4 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе доÑÑÑпнÑе ÑÑнкÑии.
ТаблиÑа F.4. ФÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ ÐºÑбами
| ФÑнкÑÐ¸Ñ | РезÑлÑÑÐ°Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ |
|---|---|---|---|
cube(float8) | cube | СоздаÑÑ Ð¾Ð´Ð½Ð¾Ð¼ÐµÑнÑй кÑб, Ñ ÐºÐ¾ÑоÑого обе кооÑдинаÑÑ ÑавнÑ. | cube(1) == '(1)' |
cube(float8, float8) | cube | СоздаÑÑ Ð¾Ð´Ð½Ð¾Ð¼ÐµÑнÑй кÑб. | cube(1,2) == '(1),(2)' |
cube(float8[]) | cube | СоздаÑÑ ÐºÑб нÑлевого обÑÑма по кооÑдинаÑам, опÑеделÑемÑм маÑÑивом. | cube(ARRAY[1,2]) == '(1,2)' |
cube(float8[], float8[]) | cube | СоздаÑÑ ÐºÑб Ñ ÐºÐ¾Ð¾ÑдинаÑами пÑавого веÑÑ Ð½ÐµÐ³Ð¾ и левого нижнего Ñглов, опÑеделÑемÑми двÑÐ¼Ñ Ð¼Ð°ÑÑивами, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ длинÑ. | cube(ARRAY[1,2], ARRAY[3,4]) == '(1,2),(3,4)' |
cube(cube, float8) | cube | СоздаÑÑ Ð½Ð¾Ð²Ñй кÑб, добавлÑÑ ÑазмеÑноÑÑÑ Ðº ÑÑÑеÑÑвÑÑÑÐµÐ¼Ñ ÐºÑÐ±Ñ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм знаÑением новой кооÑдинаÑÑ Ð´Ð»Ñ Ð¾Ð±ÐµÐ¸Ñ Ñглов. ÐÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, когда нÑжно поÑÑÑоиÑÑ ÐºÑÐ±Ñ Ð¿Ð¾ÑÑапно из вÑÑиÑлÑемÑÑ Ð·Ð½Ð°Ñений. | cube('(1,2),(3,4)'::cube, 5) == '(1,2,5),(3,4,5)' |
cube(cube, float8, float8) | cube | СоздаÑÑ Ð½Ð¾Ð²Ñй кÑб, добавлÑÑ ÑазмеÑноÑÑÑ Ðº ÑÑÑеÑÑвÑÑÑÐµÐ¼Ñ ÐºÑбÑ. ÐÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, когда нÑжно поÑÑÑоиÑÑ ÐºÑÐ±Ñ Ð¿Ð¾ÑÑапно из вÑÑиÑлÑемÑÑ Ð·Ð½Ð°Ñений. | cube('(1,2),(3,4)'::cube, 5, 6) == '(1,2,5),(3,4,6)' |
cube_dim(cube) | integer | ÐозвÑаÑÐ°ÐµÑ ÑиÑло ÑазмеÑноÑÑей кÑба. | cube_dim('(1,2),(3,4)') == '2' |
cube_ll_coord(cube, integer) | float8 | ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение n-ной кооÑдинаÑÑ Ð»ÐµÐ²Ð¾Ð³Ð¾ нижнего Ñгла кÑба. | cube_ll_coord('(1,2),(3,4)', 2) == '2' |
cube_ur_coord(cube, integer) | float8 | ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение n-ной кооÑдинаÑÑ Ð¿Ñавого веÑÑ
него Ñгла кÑба. | cube_ur_coord('(1,2),(3,4)', 2) == '4' |
cube_is_point(cube) | boolean | ÐозвÑаÑÐ°ÐµÑ true, еÑли кÑб ÑвлÑеÑÑÑ ÑоÑкой, Ñо еÑÑÑ ÐµÑли два опÑеделÑÑÑÐ¸Ñ ÐµÐ³Ð¾ Ñгла ÑовпадаÑÑ. | |
cube_distance(cube, cube) | float8 | ÐозвÑаÑÐ°ÐµÑ ÑаÑÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ ÐºÑбами. ÐÑли оба кÑба ÑвлÑÑÑÑÑ ÑоÑками, вÑÑиÑлÑеÑÑÑ Ð¾Ð±ÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑаÑÑÑоÑниÑ. | |
cube_subset(cube, integer[]) | cube | СоздаÑÑ Ð½Ð¾Ð²Ñй кÑб из ÑÑÑеÑÑвÑÑÑего, иÑполÑзÑÑ ÑпиÑок ÑазмеÑноÑÑей из маÑÑива. ÐÐ¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ñглов в одном измеÑении, Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑений и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ñ Ð¿Ð¾ÑÑдка. | cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[2]) == '(3),(7)' cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]) == '(5,3,1,1),(8,7,6,6)' |
cube_union(cube, cube) | cube | СоздаÑÑ Ð¾Ð±Ñединение двÑÑ ÐºÑбов. | |
cube_inter(cube, cube) | cube | СоздаÑÑ Ð¿ÐµÑеÑеÑение двÑÑ ÐºÑбов. | |
cube_enlarge(c cube, r double, n integer) | cube | УвелиÑÐ¸Ð²Ð°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÑба на заданнÑй ÑадиÑÑ r как минимÑм в n измеÑениÑÑ
. ÐÑли ÑадиÑÑ Ð¾ÑÑиÑаÑелÑнÑй, кÑб, наобоÑоÑ, ÑменÑÑаеÑÑÑ. ÐÑе опÑеделÑннÑе измеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð½Ð° велиÑÐ¸Ð½Ñ ÑадиÑÑа r. ÐооÑдинаÑÑ Ð»ÐµÐ²Ð¾Ð³Ð¾ нижнего Ñгла ÑменÑÑаÑÑÑÑ Ð½Ð° r, а кооÑдинаÑÑ Ð¿Ñавого веÑÑ
него ÑвелиÑиваÑÑÑÑ Ð½Ð° r. ÐÑли кооÑдинаÑа левого нижнего Ñгла ÑÑановиÑÑÑ Ð±Ð¾Ð»ÑÑе ÑооÑвеÑÑÑвÑÑÑей кооÑдинаÑÑ Ð¿Ñавого веÑÑ
него (ÑÑо возможно, ÑолÑко когда r < 0), обоим кооÑдинаÑам пÑиÑваиваеÑÑÑ Ð¸Ñ
ÑÑеднее знаÑение. ÐÑли n пÑевÑÑÐ°ÐµÑ ÑиÑло опÑеделÑннÑÑ
измеÑений и кÑб ÑвелиÑиваеÑÑÑ (r > 0), добавлÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑазмеÑноÑÑи, недоÑÑаÑÑие до n; наÑалÑнÑм знаÑением Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
кооÑÐ´Ð¸Ð½Ð°Ñ ÑÑиÑаеÑÑÑ Ð½Ð¾Ð»Ñ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾ÐºÑÑжаÑÑиÑ
ÑоÑÐºÑ Ð¿ÑÑмоÑголÑников Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ближайÑиÑ
ÑоÑек. | cube_enlarge('(1,2),(3,4)', 0.5, 3) == '(0.5,1.5,-0.5),(3.5,4.5,0.5)' |
F.9.4. Ðоведение по ÑмолÑаниÑ
Я полагаÑ, ÑÑо ÑÑо обÑединение:
select cube_union('(0,5,2),(2,3,1)', '0');
cube_union
-------------------
(0, 0, 0),(2, 5, 2)
(1 row)не пÑоÑивоÑеÑÐ¸Ñ Ð·Ð´ÑÐ°Ð²Ð¾Ð¼Ñ ÑмÑÑлÑ, как и ÑÑо пеÑеÑеÑение
select cube_inter('(0,-1),(1,1)', '(-2),(2)');
cube_inter
-------------
(0, 0),(1, 0)
(1 row)Ðо вÑÐµÑ Ð±Ð¸Ð½Ð°ÑнÑÑ Ð¾Ð¿ÐµÑаÑиÑÑ Ñ ÐºÑбами ÑазнÑÑ ÑазмеÑноÑÑей, Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ, ÑÑо кÑб Ñ Ð¼ÐµÐ½ÑÑей ÑазмеÑноÑÑÑÑ ÑвлÑеÑÑÑ Ð´ÐµÐºÐ°ÑÑовой пÑоекÑией; Ñо еÑÑÑ Ð² опÑÑеннÑÑ Ð² ÑÑÑоковом пÑедÑÑавлении кооÑдинаÑÐ°Ñ Ð¿ÑедполагаÑÑÑÑ Ð½Ñли. Таким обÑазом, показаннÑе вÑÑе вÑÐ·Ð¾Ð²Ñ ÑавнознаÑÐ½Ñ ÑледÑÑÑим:
cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');Ð ÑледÑÑÑем пÑедикаÑе вклÑÑÐµÐ½Ð¸Ñ Ð¿ÑименÑеÑÑÑ ÑинÑакÑÐ¸Ñ ÑоÑек, Ñ Ð¾ÑÑ ÑакÑиÑеÑки вÑоÑой аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑедÑÑавлÑеÑÑÑ Ð²Ð½ÑÑÑи кÑбом. ÐÑÐ¾Ñ ÑинÑакÑÐ¸Ñ Ð¸Ð·Ð±Ð°Ð²Ð»ÑÐµÑ Ð¾Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи опÑеделÑÑÑ Ð¾ÑделÑнÑй Ñип ÑоÑек и ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑедикаÑов (cube,point).
select cube_contains('(0,0),(1,1)', '0.5,0.5');
cube_contains
--------------
t
(1 row)F.9.5. ÐÑимеÑаниÑ
ÐÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑвидеÑÑ Ð² ÑегÑеÑÑионном ÑеÑÑе sql/cube.sql.
Ðо избежание некоÑÑекÑного пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого Ñипа, ÑиÑло ÑазмеÑноÑÑей кÑбов иÑкÑÑÑÑвенно огÑаниÑено знаÑением 100. ÐÑли ÑÑо огÑаниÑение Ð²Ð°Ñ Ð½Ðµ ÑÑÑÑаиваеÑ, его можно измениÑÑ Ð² cubedata.h.
F.9.6. ÐлагодаÑноÑÑи
ÐеÑвÑй авÑоÑ: Ðжин Селков мл. <[email protected]>, ÐÑгоннÑÐºÐ°Ñ Ð½Ð°ÑионалÑÐ½Ð°Ñ Ð»Ð°Ð±Ð¾ÑаÑоÑиÑ, ÐÑдел маÑемаÑики и компÑÑÑеÑнÑÑ
наÑк
Я оÑÐµÐ½Ñ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñен в пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¿ÑоÑеÑÑоÑÑ Ðжо ÐеллеÑÑÑÐµÐ¹Ð½Ñ (https://dsf.berkeley.edu/jmh/) за поÑÑнение ÑÑÑи GiST (http://gist.cs.berkeley.edu/) и его бÑвÑÐµÐ¼Ñ ÑÑÑденÑÑ, Ðнди ÐонгÑ, за пÑимеÑ, напиÑаннÑй Ð´Ð»Ñ Illustra. Я Ñакже пÑизнаÑелен вÑем ÑазÑабоÑÑикам Postgres в наÑÑоÑÑем и пÑоÑлом за возможноÑÑÑ ÑоздаÑÑ Ñвой ÑобÑÑвеннÑй Ð¼Ð¸Ñ Ð¸ Ñпокойно жиÑÑ Ð² нÑм. ÐÑÑ Ñ Ñ Ð¾Ñел Ð±Ñ Ð²ÑÑазиÑÑ Ð¿ÑизнаÑелÑноÑÑÑ ÐÑгоннÑкой лабоÑаÑоÑии и ÐиниÑÑеÑÑÑÐ²Ñ ÑнеÑгеÑики СШРза Ð³Ð¾Ð´Ñ Ð¿Ð¾ÑÑоÑнной поддеÑжки Ð¼Ð¾Ð¸Ñ Ð¸ÑÑледований в облаÑÑи баз даннÑÑ .
ÐеболÑÑие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑÑÐ¾Ñ Ð¿Ð°ÐºÐµÑ Ð²Ð½ÑÑ ÐÑÑно ÐолÑÑ III <[email protected]> в авгÑÑÑе/ÑенÑÑбÑе 2002 г. Ð Ñом ÑиÑле он пеÑеÑÑл Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð°Ñной к двойной ÑоÑноÑÑи и добавил неÑколÑко новÑÑ
ÑÑнкÑий.
ÐополниÑелÑнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½ÑÑ ÐжоÑÑа РейÑ
<[email protected]> в иÑле 2006 г. Ð ÑаÑÑноÑÑи, он добавил cube(float8[], float8[]), подÑиÑÑил код и пеÑевÑл его на пÑоÑокол вÑзовов веÑÑии V1 Ñ ÑÑÑаÑевÑего пÑоÑокола V0.