Раньше можно было пользоваться любым дополнением целый год, даже не обновляясь.
Сейчас без изменения организации совместимости приходится ждать месяца два когда дополнения добьются до новой версии FX (при полном времени жизни версии в 6 месяцев).
То есть 20-30% времени эта новомодная тенденция держит дополнения вырубленными.
Спасибо!
А вы не могли бы сделать сводную таблицу прав?
GNU, Creative Commons, Public Domain, FreeWare, ShareWare и т.д?
И пометить «Да/Нет» по списку прав:
1)Использовать конечный продукт бесплатно на протяжении любого времени
2)Читать исходники
3)Использовать идеи, методики, техники из исходников в своих проектах
4)Использовать идеи, методики, техники конечного продукта в своих проектах
5)Изменять исходники
6)Обязательно открывать изменённые исходники
7)Иметь право продавать изменённый проект
8)Бесплатно использовать бинарники в своих проектах
9)Обязательно указывать чьи бинарники использованы
10)Обязательно отчислять автору использованных бинарников в случае продаж своего проекта
и так далее.
А то лицензий очень много и простому программисту может быть тяжко выбрать тип для своего продукта или правильно понимать насколько можно использовать чужой
«Княжество Монако объявило войну независимому государству Техас!
Вспомнили, что век с небольшим назад Техас занял 20 000 000 франков — и подло скрылся в теле США.
Князь Рене объявил войну Техасу, произвел мобилизацию резервистов ( в том числе был мобилизован гражданин Монако — Аристотель Онассис, еще не женатый на Жаклин...), собранных в спортлагере на территории Франции (ну, места в Монако не было!) и пригрозил репрессалиями в форме недопуска к рулетке граждан США. После чего супостат капитулировал, заплатив $5000000, а в Монако был парад резервистов и единственного регулярного формирования Монако — самого большого в мире военного оркестра -200 музыкантов.
(Слухи о том, что бронированный Роллс-Ройс Онассиса представлял бронесилы княжества недостоверны)»
Мнэ… Сейчас почти вся капча аутсорсится на гастарбайтеров, суть хомо сапиенсов.
Поэтому вопрос не в том, чтобы отсечь роботов, а в том, чтобы отсечь нерелевантных посетителей.
Покуда я понял, что таким контролем может быть только контекстный вопрос — тот, на который не ответит гастарбайтер, и ответит вероятный клиент.
Как формулировать вопрос — штука сложная, особенно в общественных местах где трудно объединить людей одним контекстом. Например разноплановый форум.
Опять же есть слабо ориентированные ресурсы, скажем магазины, где любой гастарбайтер легко пройдёт капчу. (Правда у магазина есть другие механизмы — хоть бы и 1 доллар на депозите).
Разъясните, пожалуйста, политику партии классификацию HTC:
* Названия какого рода являются флагманами?
* Что и по каким названиям является ответвлением от флагманов, и в какие практические стороны?
* Что значат HD, HD2, Pro, Pro2, S в смысле ответвлений?
Иначе скоро у меня крыша съедет: каждый анонс каждой модели HTC — сенсационный, не меньше.
Фрагмент 1, через арксинус векторного произведения:
//=============================================================
//sin(a, b) = len(vector_prod(a, b)) / (len(a) * len(b))
float P0x, P0y; // origin of the angle
float P1x, P1y; // start of an angle segment
float P2x, P2y; // finish of an angle segment
float Ax = P1x — P0x, Ay = P1y — P0y; // convert segment (P0,P1) to (0,A)
float Bx = P2x — P0x, By = P2y — P0y; // convert segment (P0,P2) to (0,B)
if ( Ax == 0.0 && Ay == 0.0 ) // len_a == 0.0
throw Exception__Point_is_on_Vertex;
if ( Bx == 0.0 && By == 0.0 ) // len_b == 0.0
throw Exception__Point_is_on_Vertex;
float len_a = sqrt(Ax * Ax + Ay * Ay); // length of vector a
float len_b = sqrt(Bx * Bx + By * By); // length of vector b
float vector_prod_x = Ay * 0.0 — 0.0 * By; // Bz and Az are zero
float vector_prod_y = 0.0 * Bx — Ax * 0.0; // Az and Bz are zero
float vector_prod_z = Ax * By — Ay * Bx;
float vector_prod_len = vector_prod_z; // singular case, no sqrt() needed
Фрагмент 2, через арккосинус скалярного произведения:
//cos(a, b) = scalar_prod(a, b) / (len(a) * len(b))
float P0x, P0y; // origin of the angle
float P1x, P1y; // start of an angle segment
float P2x, P2y; // finish of an angle segment
float Ax = P1x — P0x, Ay = P1y — P0y; // convert segment (P0,P1) to (0,A)
float Bx = P2x — P0x, By = P2y — P0y; // convert segment (P0,P2) to (0,B)
if ( Ax == 0.0 && Ay == 0.0 ) // len_a == 0.0
throw Exception__Point_is_on_Vertex;
if ( Bx == 0.0 && By == 0.0 ) // len_b == 0.0
throw Exception__Point_is_on_Vertex;
float len_a = sqrt(Ax * Ax + Ay * Ay); // length of vector a
float len_b = sqrt(Bx * Bx + By * By); // length of vector b
Первый фрагмент глюкавый (помечено).
Второй фрагмент на одно умножение сложнее третьего и
Третий фрагмент получается самым оптимальным, но опять глюк на синусе…
Ну, так и получается, что через арккосинус скалярного проще и вернее.
Кстати, если точка внутри фигуры, то я насчитал два случая +2π и -2π.
И если точка на ребре, то тоже вижу два случая π и 3π.
А так вообще везде надо перепроверить операцию «== 0.0» на корректность. Мало ли…
он работает для любых многоугольников, как выпуклых, так и невыпуклых.
исключения, я назвал, незамкнутые ломаные и точка на ребре (приходится доверять значению п+-epsilon).
угол вспомню чуть позже — с компа вместо мобилки.
но, вероятно вы правы: скорее через арккосинус скалярного.
тогда вычисления самозащищены от деления на ноль.
Да, надо сделать бесконечный луч в любую сторону из точки. Если количество пересечений нечётное, то точка внутри.
Если луч совпал с отрезком фигуры, тогда алгоритму задница.
Я делал так: считал сумму углов из точки до концов отрезка, и так для каждого отрезка ломаной. Сам, блин, кустарно изобретал.
Результат был простой:
• если сумма равна ±2π, то точка внутри.
• если сумма равна 0, то точка снаружи.
• побочно: если сумма равна +-π, то точка на границе (с оговорками на точность арифметики).
Дырка была в том случае, если концы незамкнутой ломаной лежат на луче, исходящем из точки.
Но по условиям на входе был таки замкнутый многоугольник. ;-)
Позже проконсультировался с математиком, он предложил в общем случае интеграл по контуру (забыл какой функции), а в частном случае с ломаной таки сумму видимым углов обозрения, так как «изобрёл» я.
Сейчас без изменения организации совместимости приходится ждать месяца два когда дополнения добьются до новой версии FX (при полном времени жизни версии в 6 месяцев).
То есть 20-30% времени эта новомодная тенденция держит дополнения вырубленными.
А вы не могли бы сделать сводную таблицу прав?
GNU, Creative Commons, Public Domain, FreeWare, ShareWare и т.д?
И пометить «Да/Нет» по списку прав:
1)Использовать конечный продукт бесплатно на протяжении любого времени
2)Читать исходники
3)Использовать идеи, методики, техники из исходников в своих проектах
4)Использовать идеи, методики, техники конечного продукта в своих проектах
5)Изменять исходники
6)Обязательно открывать изменённые исходники
7)Иметь право продавать изменённый проект
8)Бесплатно использовать бинарники в своих проектах
9)Обязательно указывать чьи бинарники использованы
10)Обязательно отчислять автору использованных бинарников в случае продаж своего проекта
и так далее.
А то лицензий очень много и простому программисту может быть тяжко выбрать тип для своего продукта или правильно понимать насколько можно использовать чужой
ну здравствуй, обслужим, так и быть»
Вспомнили, что век с небольшим назад Техас занял 20 000 000 франков — и подло скрылся в теле США.
Князь Рене объявил войну Техасу, произвел мобилизацию резервистов ( в том числе был мобилизован гражданин Монако — Аристотель Онассис, еще не женатый на Жаклин...), собранных в спортлагере на территории Франции (ну, места в Монако не было!) и пригрозил репрессалиями в форме недопуска к рулетке граждан США. После чего супостат капитулировал, заплатив $5000000, а в Монако был парад резервистов и единственного регулярного формирования Монако — самого большого в мире военного оркестра -200 музыкантов.
(Слухи о том, что бронированный Роллс-Ройс Онассиса представлял бронесилы княжества недостоверны)»
«отучаемся говорить за всех»©FIDO
меня устроит запись get_x() и set_x(v)
Поэтому вопрос не в том, чтобы отсечь роботов, а в том, чтобы отсечь нерелевантных посетителей.
Покуда я понял, что таким контролем может быть только контекстный вопрос — тот, на который не ответит гастарбайтер, и ответит вероятный клиент.
Как формулировать вопрос — штука сложная, особенно в общественных местах где трудно объединить людей одним контекстом. Например разноплановый форум.
Опять же есть слабо ориентированные ресурсы, скажем магазины, где любой гастарбайтер легко пройдёт капчу. (Правда у магазина есть другие механизмы — хоть бы и 1 доллар на депозите).
Разъясните, пожалуйста, политику партии классификацию HTC:
* Названия какого рода являются флагманами?
* Что и по каким названиям является ответвлением от флагманов, и в какие практические стороны?
* Что значат HD, HD2, Pro, Pro2, S в смысле ответвлений?
Иначе скоро у меня крыша съедет: каждый анонс каждой модели HTC — сенсационный, не меньше.
С брендами грабли в том, что половина от неанглийских названий, фамилий…
Надо отдельное исследование, наверное
Гражданин автор, а что за подводные камни-то?
(o)
считается, что
o
содержит внешнее пространство, а пространство между
((
считается внутреннием.
И к чему относится содержимое самой маленькой о вложенности этой маленькой о, если чётность-нечётность вы не знаете?
Более того, как считать площадь многоугольника, кроме как способом модуля от ориентинованной площади? :-D
Ориентированная площадь для меня наиболее простой и очевидный способ при наличии координат вершин многоугольника.
Фрагмент 1, через арксинус векторного произведения:
//=============================================================
//sin(a, b) = len(vector_prod(a, b)) / (len(a) * len(b))
float P0x, P0y; // origin of the angle
float P1x, P1y; // start of an angle segment
float P2x, P2y; // finish of an angle segment
float Ax = P1x — P0x, Ay = P1y — P0y; // convert segment (P0,P1) to (0,A)
float Bx = P2x — P0x, By = P2y — P0y; // convert segment (P0,P2) to (0,B)
if ( Ax == 0.0 && Ay == 0.0 ) // len_a == 0.0
throw Exception__Point_is_on_Vertex;
if ( Bx == 0.0 && By == 0.0 ) // len_b == 0.0
throw Exception__Point_is_on_Vertex;
float len_a = sqrt(Ax * Ax + Ay * Ay); // length of vector a
float len_b = sqrt(Bx * Bx + By * By); // length of vector b
float vector_prod_x = Ay * 0.0 — 0.0 * By; // Bz and Az are zero
float vector_prod_y = 0.0 * Bx — Ax * 0.0; // Az and Bz are zero
float vector_prod_z = Ax * By — Ay * Bx;
float vector_prod_len = vector_prod_z; // singular case, no sqrt() needed
{//bug here!!!
if ( vector_prod_len == 0.0 )
throw Exception__Point_is_on_Segment;
float sin_gamma = vector_prod_len / (len_a * len_b);
};//bugged block finished
float gamma = asin(sin_gamma);
return gamma;
// total:
// arcsine: 1
// square root: 2
// multiplication: 11
// division: 1
// addition: 2
// substraction: 7
// test condition: 2
// conjunction: 2
// equality: 4
Фрагмент 2, через арккосинус скалярного произведения:
//cos(a, b) = scalar_prod(a, b) / (len(a) * len(b))
float P0x, P0y; // origin of the angle
float P1x, P1y; // start of an angle segment
float P2x, P2y; // finish of an angle segment
float Ax = P1x — P0x, Ay = P1y — P0y; // convert segment (P0,P1) to (0,A)
float Bx = P2x — P0x, By = P2y — P0y; // convert segment (P0,P2) to (0,B)
if ( Ax == 0.0 && Ay == 0.0 ) // len_a == 0.0
throw Exception__Point_is_on_Vertex;
if ( Bx == 0.0 && By == 0.0 ) // len_b == 0.0
throw Exception__Point_is_on_Vertex;
float len_a = sqrt(Ax * Ax + Ay * Ay); // length of vector a
float len_b = sqrt(Bx * Bx + By * By); // length of vector b
float scalar_prod = Ax * Bx + Ay * By;
float cos_gamma = cos_gamma = scalar_prod / (len_a * len_b);
float gamma = acos(cos_gamma);
return gamma;
// total:
// arccosine: 1
// square root: 2
// multiplication: 7
// division: 1
// addition: 3
// substraction: 4
// test condition: 2
// conjunction: 2
// equality: 4
Фрагмент 3, через площадь треугольника детерминантом и площадь синусом:
//=============================================================
// surface of a triangulum is equal to a half
// of the coordinated matrix determinant:
// |Ox, Oy, 1|
// S = (1/2) * |Ax, Ay, 1|
// |Bx, By, 1|
// S = (1/2) * (Ox * (Ay — By) + Ax * (By — Oy) + Bx * (Oy — Ay) =
// (considering Ox, Oy are zero)
// = Ax * By – Bx * Ay
//
// also
// surface of triangulum is
// S = (1/2) * |OA| * |OB| * sin_gamma
//
// therefore
// sin_gamma = 2 * S / (|OA| * |OB|) = determinant / (|OA| * |OB|)
float x0, y0; // point to test, point_0
float x1, y1; // segment start, point_1
float x2, y2; // segment finish, point_2
float Ax = P1x — P0x, Ay = P1y — P0y; // convert segment (P0,P1) to (0,A)
float Bx = P2x — P0x, By = P2y — P0y; // convert segment (P0,P2) to (0,B)
if ( Ax == 0.0 && Ay == 0.0 ) // len_a == 0.0
throw Exception__Point_is_on_Vertex;
if ( Bx == 0.0 && By == 0.0 ) // len_b == 0.0
throw Exception__Point_is_on_Vertex;
float len_a = sqrt(Ax * Ax + Ay * Ay); // length of vector a
float len_b = sqrt(Bx * Bx + By * By); // length of vector b
float determinant = Ax * By — Bx * Ay;
float sin_gamma;
// if the triangle is degenerate, determinant is zero, angle is zero,
// and point is on the segment
{//bug here!!!
if ( determinant == 0.0 )
throw Exception__Point_is_on_Segment;
float sin_gamma = determinant / (len_a * len_b);
};//bugged block finished
float gamma = asin(sin_gamma);
return gamma;
// total:
// arcsine: 1
// square root: 2
// multiplication: 6
// division: 1
// addition: 2
// substraction: 5
// test condition: 3
// conjunction: 2
// equality: 5
Первый фрагмент глюкавый (помечено).
Второй фрагмент на одно умножение сложнее третьего и
Третий фрагмент получается самым оптимальным, но опять глюк на синусе…
Ну, так и получается, что через арккосинус скалярного проще и вернее.
Кстати, если точка внутри фигуры, то я насчитал два случая +2π и -2π.
И если точка на ребре, то тоже вижу два случая π и 3π.
А так вообще везде надо перепроверить операцию «== 0.0» на корректность. Мало ли…
исключения, я назвал, незамкнутые ломаные и точка на ребре (приходится доверять значению п+-epsilon).
угол вспомню чуть позже — с компа вместо мобилки.
но, вероятно вы правы: скорее через арккосинус скалярного.
тогда вычисления самозащищены от деления на ноль.
Если луч совпал с отрезком фигуры, тогда алгоритму задница.
Результат был простой:
• если сумма равна ±2π, то точка внутри.
• если сумма равна 0, то точка снаружи.
• побочно: если сумма равна +-π, то точка на границе (с оговорками на точность арифметики).
Дырка была в том случае, если концы незамкнутой ломаной лежат на луче, исходящем из точки.
Но по условиям на входе был таки замкнутый многоугольник. ;-)
Позже проконсультировался с математиком, он предложил в общем случае интеграл по контуру (забыл какой функции), а в частном случае с ломаной таки сумму видимым углов обозрения, так как «изобрёл» я.
anwap.org/servis/story/story1305-1335.html