среда, 3 августа 2011 г.

Стрелки - формулы для координат.

Недавно понадобилось рисовать стрелки в программе (4fun среда для моделирования с преферансом и поэтессами), проблема - зная две точки - начало и конец отрезка, нарисовать стрелку. Решение ниже.

Итак, дано:

Даны точки (x0 ; y0) и (x1 ; y1). Дан угол между отрезками (для удобства вычислений взят 45 градусов). Дана длина мелких отрезков. Нужно найти координаты (x3 ; y3) и (x4 ; y4).

Находим угловой коэффициент прямой, проходящий через точки (x0 ; y0) и (x1 ; y1):

Делаем выкладки, для угловых коэффициентов прямых (x1 ; y1)(x3 ; y3) и (x1 ; y1)(x4 ; y4) :

Обозначим длину отрезка (x1 ; y1)(x3 ; y3) как L. Зная это L и r, можем найти x:



Теперь легко найти y:


Как видно, получили для (x3 ; y3) (x4 ; y4) по две пары точек. Нам нужно взять из них ближайшие к точке (x0 ; y0). Т.е. оценить расстояния:

Или, упростив:

Алгоритм


Берем такие (x3 ; y3) и (x4 ; y4), при которых минимально

и

соответственно.

P.S. Все картинки кликабельны.


понедельник, 16 мая 2011 г.

Удаленное управление

Мда... Давно не писал. В-общем решил запостить небольшую программку, которую использую на работе. Итак, ситуация: есть компов 50, у каждого уникальное имя, все введены в один домен и соответственно находятся в одной подсети. Есть рутинные задачи - почистить мусор на жестких дисков, собрать информация о конфигурации и т.п. Есть батники, которые это делают.

Итак, как это работает.

1. Берем один комп из всех, монтируем общий для всех сетевой диск. В файлике comps.txt вбиваем имена компов, на которых нам нужно выполнить батник.

2. Редактируем батник BAT.BAT, который будет запускаться на каждом компе. Можем в нем вызвать другой.

3. Запускаем на этом компе батник START.BAT

Как это устроенно:

START.BAT

@echo off
psexec @comps.txt -u login -p password -C RUN.EXE
pause

Параметры

@comps.txt - отсюда psexec берет имена компов

-u login - логин пользователя, под которым логинимся.

-p password - его пароль

-с run.exe - копируем run.exe на удаленную машину.

RUN.EXE

Две строчки кода на AutoIt.

RunWait("cmd /c net use X: \\dc01\xchange")

;Монтируем сетевой диск

Run("X:\RBAT\bat.bat")

;Запускаем с сетевого диска батник

Пример BAT.BAT:

rem hostname >> X:\RBAT\IP.txt
rem dir c: /b >> X:\RBAT\IP.txt
rem shutdown /s
X:\test.bat

Думаю все понятно.

Скачать

понедельник, 21 февраля 2011 г.

Конвертер vNote в Txt.

Решил вечерком скинуть заметки с телефона (LG KP-500) на компьютер, зело были нужны. Скинул по Bluetooth, глянул блокнотом, а там все кириллические символы хранятся в UTF-8, да еще и '=' понатыкано как разделителей. Ну UTF-8 зверь не экзотический, поэтому сходив на один полезный немецкий ресурс и выдернув нужные коды кириллицы, написал по-быстрому на AutoIt (работа со строками, передаваемые параметрами мне тут нравится как нигде) простой код, отладил и радовался жизни.

Пользоваться просто:

Для лентяев: перетаскиваем файлик .vnt на иконку программки, жамкаем ok, забираем результат из той же папки, что и .vnt.

Для любителей: в консоле передаем в качестве первого параметра имя .vnt файла, забираем из той же папки, где лежал .vnt.

Ссылка

четверг, 27 января 2011 г.

Класс для печати таблиц (С++)

Нашел вот в своих исходниках занимательный класс для печати таблиц в консоле. Имеются четыре способа отображения таблиц, автоматический перенос строки, если строка не помещается по ширине в строке. Как пользоваться:

Сначала создаем объект класса:
TablePRINT *tp = new TablePRINT(3,0,3,2);
Параметры (по порядку):
1 - количество столбцов
2 - вид (от 0 до 4)
3 - количество пробелов между значением и границей слева
4 - количество пробелов между значением и границей справа

Далее печатаем строки:
tp->TableROW("Allan", "Norton", "40");
После каждой строки, если нужно печатаем разделительную линию:
tp->TableLINE();

И в самом конце печатаем подвал:
tp->TableBOTTOM();

Вот парочка примеров:


В архиве лежит сам исходник класса и пример использования.