• Закрасить часть фигуры "Инь-Янь" c#?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Проще всего чередовать рисование чёрным и белым - нарисовать чёрный полукруг, потом 4 круга и внешнюю окружность. Как-то так:

    private static void DrawYinYang(Graphics gr,int xctr,int yctr,int rmax,int rint,int ysmall,int rsmall) {
                Brush white=Brushes.White;
                Brush black=Brushes.Black;
                Pen BlackPen=new Pen(Color.Black,2*(rmax-rint));
    
                gr.FillPie(black,xctr-rmax,yctr-rmax,2*rmax,2*rmax,-90,180);
                gr.FillEllipse(white,xctr-rint/2,yctr-rint,rint,rint);
                gr.FillEllipse(black,xctr-rint/2,yctr,rint,rint);
                gr.FillEllipse(white,xctr-rsmall,yctr+ysmall-rsmall,2*rsmall,2*rsmall);
                gr.FillEllipse(black,xctr-rsmall,yctr-ysmall-rsmall,2*rsmall,2*rsmall);
                double rcircle=(rmax+rint)/2.0;
                gr.DrawEllipse(BlackPen,(float)(xctr-rcircle),(float)(yctr-rcircle),(float)(2*rcircle),(float)(2*rcircle));
            }

    Если же хочется именно закрасить криволинейную фигуру, надо изучать, что такое GraphicPath, и использовать FIllRegion. Но я так не пробовал.
    Ответ написан
    Комментировать
  • Проективное преобразование (поиск относительного положения точки)

    Mrrl
    @Mrrl
    Заводчик кардиганов
    А можете для какого-нибудь примера написать полученные прямую и обратную матрицы? Например, для A=M, B=N, D=K, C=(2,2) ?
    Ответ написан
  • Как построить матрицу проективного преобразования без сторонних библиотек?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Проще всего сначала построить матрицу преобразования из квадрата в 4-угольник, а потом взять обратную.
    Точки плоскости будем записывать, как принято в компьютерной графике, как строки: (x y 1) для собственной точки и (x y 0) для несобственной. Строка (c* c*y c) обозначает ту же точку, что и (x y 1) (при с!=0).
    Пусть матрица преобразования M=((a11 a12 a13) (a21 a22 a23) (a31 a32 a33)). Точка (u,v) квадрата переходит в точку (x,y) четырёхугольника, если для некоторого с!=0 выполняется
    (u v 1)*M=(c*x c*y c).
    Сначала возьмём вершину (0,0). Получим
    a31=c1*x1, a32=c1*y1, a33=c1. Видно, что мы можем взять a33=c1=1 (матрица тоже определена с точностью до пропорциональности), и у нас есть последняя строчка:
    a31=x1, a32=y1, a33=1.
    Теперь подставим остальные вершины. Получим 9 уравнений:
    a11+x1=c2*x2
    a12+y1=c2*y2
    a13+1=c2
    a11+a21+x1=c3*x3
    a12+a22+y1=c3*y3
    a13+a23+1=c3
    a21+x1=c4*x4
    a22+y1=c4*y4
    a23+1=c4
    Это квадратная система из 9 линейных уравнений. Её легко решить методом Гаусса. А можно вручную исключить все переменные, кроме c2,c3,c4, получить систему из 3 уравнений, решить каким-нибудь методом Крамера (через определители) и восстановить a11,a12,...,a23.
    Потом уже посчитать матрицу, обратную к построенной. Можно тоже через определители.
    Ответ написан
  • Поиск алгоритма в графе

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Насколько я понял, вам надо раскрасить вершины N-мерного куба (иначе как объяснить 2^N вершин и N рёбер?) в K цветов так, чтобы в 1-окрестности любой вершины (т.е. она сама плюс все её соседи) присутствовали все цвета.
    Задача очень похожа на коды, исправляющие ошибки. Но там обычно ставится двойственное условие - чтобы в 1-окрестности любой вершины каждый цвет встречался не более одного раза.
    Если N=2^m-1, то у задачи есть точное решение (c K=N+1), оно описывается кодом Хэмминга: все кодовые слова красим в один цвет, а множество вершин каждого другого цвета получаем из кодовых слов с помощью XOR с константой (своей для каждого цвета).
    Для других N надо думать. Но в этом есть смысл только если я правильно понял задачу.
    Ответ написан
    Комментировать
  • Какая сортировка самая быстрая?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если есть память на ещё один массив из 100000 элементов, то быстрее всего будет работать сортировка подсчётом:

    void CountSort(int *A1,int *A2,int L,int Nmax){
    for(int i=0;i<=Nmax;i++) A2[i]=0;
    for(int i=0;i < L;i++) A2[A1[i]]++;
    int s=0;
    for(int i=0;i<=Nmax;i++) for(int j=0;j < A2[i];j++) A1[s++]=i;
    }

    Здесь A1 - сортируемый массив, A2 - дополнительный массив длиной Nmax+1.
    У меня получилось среднее время 0.88 миллисекунды. Для сравнения, std::sort даёт на тех же примерах 7.2 миллисекунды - в 8 раз больше.
    Возможно, радикс-сортировка по модулю 256 даст ещё меньшее время (она не так агрессивно работает с памятью). Но она в 4 строчки не уместится.
    Ответ написан
    1 комментарий
  • Алгоритм подсчета количества чисел в промежутке от А до B, сумма цифр которых четна?

    Mrrl
    @Mrrl
    Заводчик кардиганов

    На каждом отрезке от 10*n до 10*n+9 таких чисел ровно 5. Поэтому нам достаточно посчитать число таких полных отрезков, и обработать краевые отрезки. Пусть sumdig(n) - функуция, которая выдаёт остаток от деления суммы цифр n на 2. Тогда: int s0=(B/10-A/10-1)*5; int s1=(10+sumdig(A/10)-A%10)/2; int s2=(2+B%10-sumdig(B/10))/2; return s0+s1+s2;

    Ответ написан
    Комментировать
  • Трекер сломался?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Не только трекер. Сообщения об ответах на комментарии тоже не приходят.
    Ответ написан
    1 комментарий
  • Что такое вселенная?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Вселенная — четырехмерный (как минимум) объект, обладающий метрикой пространства-времени.
    Большой взрыв — самая ранняя по времени точка Вселенной. «До него» ничего и нигде существовать не могло, потому более ранних точек пространства-времени не существует.
    Вероятно, Вселенная бесконечна и «плоская», т.е. её геометрия евклидова — с хорошей точностью. Она более-менее однородно заполнена материей (в масштабах метагалактик, т.е. сотен мегапарсеков), и её масса бесконечна.
    Вложено ли пространство-время Вселенной в какое-нибудь пространство большей размерности — неизвестно. Есть теория «мембран», которая предполагает, что да. Но лучше считать, что нет(с).
    Говорить о «пространстве вокруг Вселенной» нельзя — она заполняет всё пространство. Расширение идёт не за счет движения — просто увеличивается расстояние между точками (обычно приводят пример надувающегося воздушного шарика, но надо учесть, что кроме поверхности этого шарика ничего нет — а все точки этой поверхности неподвижны). Так что вопрос «в какую сторону расширяется» смысла тоже не имеет. Просто расширяется.
    Другие перемещения есть. Например, местная группа галактик движется относительно реликтового излучения со скоростью 300 (или 600?) км/сек. Существует ли «более инертная» система отсчета, чем реликтовое излучение — пока неизвестно.
    В своём пространстве-времени Вселенная одна, и столкнуться ей не с кем. Другие Вселенные с нашей информационно не связаны. «Белых дыр», которые могли бы служить «выходами» порталов между Вселенными, пока не обнаружено, а что находится по ту сторону чёрных дыр — тоже неизвестно. Известно только, что оно в бесконечно далеком (по нашим часам) будущем.
    В теории мембран Вселенные столкнуться могут. Возможно, в результате таких столкновений и происходят события, видимые как «большой взрыв». Но это надо изучать подробнее.
    Ответ написан
    2 комментария
  • Вы заменили рабочую тетрадь на планшет? Если да\нет, то почему?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В итоге взял Galaxy Note 10.1. Несколько разных программ, в которых можно рисовать и/или печатать, надо только научиться ими пользоваться и выбирать нужную в зависимости от ситуации. А еще в ней есть фотошоп, а еще она является телефоном. И, наверное, много чем еще.
    Ответ написан
    Комментировать
  • Как вы жили до «бума» социальных сетей?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Сначала — только общение со знакомыми, по e-mail. Потом по ICQ. Потом появились форумы. Чаты тоже, но они меня не очень заинтересовали. Да и соц.сети я воспринимаю просто как разновидность форумов.
    Ответ написан
    Комментировать
  • А где ты хранишь цифровые фотки, %username%?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Храню оригиналы фотографий дома, на диске (одна копия на внутреннем, одна на внешнем). Сейчас их примерно 700 ГБ, так что интернет-сервисы вряд ли помогут. А Яндекс-фотки использую, чтобы делиться с другими — очень удобно за пару кликов получить ссылку для форума, в которой не будет ничего лишнего.
    Ответ написан
    1 комментарий
  • Какие кодотрюки вы знаете?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Недавно придумал, как считать ненулевые биты в int:

    res=0; while(a){ a&=a-1; res++;}

    Потом оказалось, что в Hacker's Delight оно уже есть.
    Ответ написан
    Комментировать
  • Вы заменили рабочую тетрадь на планшет? Если да\нет, то почему?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Пока пользуюсь тетрадью. Даже программы в ней иногда пишу. Почему — не знаю, просто некогда было искать программу, которая позволила бы и писать/рисовать, и стирать написанное, и менять увеличение во все стороны, и копировать/вставлять. И чтобы это было удобно. Кроме того, тетрадь большая (в раскрытом состоянии диагональ 18 дюймов), а разрешение около 100 dpi. Планшет был бы мелковат. Тетрадки на 160 листов хватает на год-полтора, весит она меньше ноутбука.
    Вот только не могу приучить себя ставить даты в углу страницы, поэтому искать старые записи приходится по контексту.
    Почитаю эту тему — может быть, подберу альтернативу.
    Ответ написан
    Комментировать
  • Какой лучший способ копировать фотографии с Android телефона на компьютер через интернет? Целевая аудитория - девушка

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Яндекс-фотки. Нужно приложение на андроиде. Кладет фотки в ваш альбом, адресом которого можно поделиться.
    Ответ написан
    Комментировать
  • Можете подсказать алгоритм поиска наиболее часто встречающихся подстрок в тексте?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Я решал подобную задачу, заменяя самую часто встречающуюся пару символов новым символом (если она встречалась более трех раз) — правда, роль «символов» у меня играли слова. Самой длинной «часто встречающейся» подстрокой в «Мертвых Душах» оказалась «дама приятная во всех отношениях».
    Ответ написан
    Комментировать
  • Кто какую книгу считает своим "стартом" в мир IT?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Журнал «Квант» со статьями про Рапиру. Где-то в начале 80-х.
    Ответ написан
    Комментировать
  • Интересная задача на логику?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Кстати, «перебирая их по одному» можно понять, как «двигаясь только вправо». В этом случае, насколько я понимаю, задача неразрешима.
    Ответ написан
  • Интересная задача на логику?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если уж упрощать, то:

    1. Ставим на ячейку 1.
    2. A:=1
    3. A:=A*2
    4. Делаем A шагов вправо, после каждого шага записываем в ячейку 0.
    5. Делаем A шагов влево.
    6. Если в ячейке 1, идем на пункт 3.
    7. Ставим в ячейку 1 и идем вправо, считая шаги, пока не найдем 1.

    Максимальное число шагов — N*9-12 (при N>1)
    Ответ написан
  • Интересная задача на логику?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Вопрос в том, сколько у нас памяти — можем ли мы запомнить число N. А то дадут вам массив длиной в 2^2^64…
    Интересно было бы написать программу для машины Тьюринга, которая выключит свет во всем поезде.
    Ответ написан
    1 комментарий
  • Есть ли что-то быстрее BK-Tree?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Какого порядка расстояния, которые предполагаются в запросе?
    Я бы взял обычное бинарное дерево (ветвление по значению какого-нибудь бита; в каждом узле указано, по какому биту ветвиться). Тогда поиск(дерево,d)=поиск(поддерево с правильным значением бита,d)+поиск(поддерево с неправильным значением бита,d-1).
    Ответ написан
    9 комментариев