Pulsing UV through HLSL

Hello

I made a little shader to pulsate the UV on a plane for decals, it works fine.

float uvSpeed = 1;
float uvStretch = 100;

if (input.UV.x < 0.5 && input.UV.x > 0 && input.UV.y < 0.5 && input.UV.y > 0)
{
output.UV.x += -sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
output.UV.y += sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
}
if (input.UV.x < 0.5 && input.UV.x > 0 && input.UV.y > 0.5 && input.UV.y < 1)
{
output.UV.x += -sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
output.UV.y += -sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
}
if (input.UV.x > 0.5 && input.UV.x < 1 && input.UV.y > 0.5 && input.UV.y < 1)
{
output.UV.x += sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
output.UV.y += -sqrt(pow((sin(uvSpeed * Time) / uvStretch),2));
}
if (input.UV.x > 0.5 && input.UV.x < 1 && input.UV.y < 0.5 && input.UV.y > 0)
{
output.UV.x += sqrt(pow((sin(uvSpeedTime) / uvStretch),2));
output.UV.y += sqrt(pow((sin(uvSpeed
Time) / uvStretch),2));
}

But it’s very linear, I want to make it less linear aka the further away from the middle it should move less far. Anyone got an idea?
Also I thought about it to make it radial instead of quadrants. But in the end it should also apply to models so I only will modify 1/4 of the whole UV, thats why I still have >0 and <1 in the code.

Found a solution myself.

if (input.UV.x < 0.5 && input.UV.x > 0 && input.UV.y < 0.5 && input.UV.y > 0)
{
output.UV.x += (-sqrt(pow((sin(uvSpeed * Time) / uvStretch),2))) / (pow((input.UV.x +0.5),-1)) ;
output.UV.y += (sqrt(pow((sin(uvSpeed * Time) / uvStretch),2))) / (pow((input.UV.y +0.5),-1)) ;
}

to make the effect bigger another pow((pow((input.UV.y +0.5),-1)),x) will help.

on the positiv sides 0.5 - 1 there is no need for a pow -1