1 (изменено: RacalCucumber, 2025-07-16 18:31:14)

Тема: AHK: Рисование восходящей и нисходящей спирали

Добрый день. Стоит задача шевелить мышкой по спирали. Сначала расширяющуюся а затем сужающуюся, не меняя направления.

Найденное решение расширяющейся спирали:
https://www.autohotkey.com/boards/viewtopic.php?t=58006 решает первую половину проблемы. Если поменять A_Index на обратный отсчет при цикле - получается инвертировать движение мышки. Если поменять местами функции косинуса и синуса - то спираль сужается, но ее начальная точка отсчета сдвигается на 90 градусов относительно точки окончания расширяющейся спирали. 

#NoEnv 
~1::
cx := 100
cy := 100
r := 20
s := 16
a := 4
global $Pi := 4 * ATan(1)
Loop, % s * a ;расширение
{
	retx := cx + r * Cos(tmp * 2 * $Pi / s) * tmp / s
	retу := cy + r * Sin(tmp * 2 * $Pi / s) * tmp / s
	MouseMove, retx, retу, 3
	tmp := A_Index
}
Loop, % s * a  ;сужение
{
	retx := cx + r * Sin(tmp * 2 * $Pi / s) * tmp / s
	retу := cy + r * Cos(tmp * 2 * $Pi / s) * tmp / s
	MouseMove, retx, retу, 3
	EnvAdd tmp, -1
}
return

А как сделать тоже, но без искажения спирали на переходе от фазы расширения к фазе сужения? Я что то честно говоря в растерянности... Или простой функцией это не сделать, надо на сужении пересчитывать в лоб каждую позицию относительно координат точки на фазе расширения?

2

Re: AHK: Рисование восходящей и нисходящей спирали

Попробуйте так:

Loop, % s * a ;расширение
{
	tmp := A_Index
	retx := cx + r * Cos(tmp * 2 * $Pi / s) * tmp / s
	retу := cy + r * Sin(tmp * 2 * $Pi / s) * tmp / s
	MouseMove, retx, retу, 3
}
Loop, % s * a  ;сужение
{
	retx := cx + r * Sin(--tmp * 2 * $Pi / s + $Pi / 2) * tmp / s
	retу := cy + r * Cos(  tmp * 2 * $Pi / s + $Pi / 2) * tmp / s
	MouseMove, retx, retу, 3
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Рисование восходящей и нисходящей спирали

Красота. Спасибо!