Inverse Kinematics problem

i was trying to make a 2d stickman that moves with physics
my main problem is with leg placement in the idle state
i tried to use inverse kinematics
my question is basically
is this a correct way todo it
it feels too mathematical
it works but i cant rewrite the code and i will prob forget how it worked after a few days
and i used alot of chatgpt
the red dot is basically the place that the foot’s supposed to be
i can change it’s position now and the upper/lower leg will position it self accordingly
it feels very over engineered
maybe im just dumb

 Vector2 leftHip = leftHipJoint.transform.TransformPoint(leftHipJoint.anchor);
 Vector2 leftTarget = leftFootTarget.position;

 float leftDistance = Vector2.Distance(leftHip, leftTarget);

 float leftKneeForward = (leftUpperLength * leftUpperLength + leftDistance * leftDistance - leftLowerLength * leftLowerLength) / (2f * leftDistance);
 float leftKneeSide = Mathf.Sqrt(leftUpperLength * leftUpperLength - leftKneeForward * leftKneeForward);

 Vector2 leftDirection = (leftTarget - leftHip).normalized;
 Vector2 leftPerpendicular = new Vector2(-leftDirection.y, leftDirection.x);

 Vector2 leftKneeTarget = leftHip + leftDirection * leftKneeForward + leftPerpendicular * leftKneeSide;


 // Right leg
 Vector2 rightHip = rightHipJoint.transform.TransformPoint(rightHipJoint.anchor);
 Vector2 rightTarget = rightFootTarget.position;

 float rightDistance = Vector2.Distance(rightHip, rightTarget);

 float rightKneeForward = (rightUpperLength * rightUpperLength + rightDistance * rightDistance - rightLowerLength * rightLowerLength) / (2f * rightDistance);
 float rightKneeSide = Mathf.Sqrt(rightUpperLength * rightUpperLength - rightKneeForward * rightKneeForward);

 Vector2 rightDirection = (rightTarget - rightHip).normalized;
 Vector2 rightPerpendicular = new Vector2(-rightDirection.y, rightDirection.x);

 Vector2 rightKneeTarget = rightHip + rightDirection * rightKneeForward + rightPerpendicular * rightKneeSide;


 // Upper leg desired rotation
 float leftUpperLegAngle = Mathf.Atan2(leftKneeTarget.y - leftHip.y, leftKneeTarget.x - leftHip.x) * Mathf.Rad2Deg;
 float rightUpperLegAngle = Mathf.Atan2(rightKneeTarget.y - rightHip.y, rightKneeTarget.x - rightHip.x) * Mathf.Rad2Deg;


 // Lower leg desired rotation
 float leftLowerLegAngle = Mathf.Atan2(leftTarget.y - leftKneeTarget.y, leftTarget.x - leftKneeTarget.x) * Mathf.Rad2Deg;
 float rightLowerLegAngle = Mathf.Atan2(rightTarget.y - rightKneeTarget.y, rightTarget.x - rightKneeTarget.x) * Mathf.Rad2Deg;

 Debug.DrawLine(leftHip, leftKneeTarget, Color.red, 0.1f);
 Debug.DrawLine(leftKneeTarget, leftTarget, Color.blue, 0.1f);
 Debug.DrawLine(rightHip, rightKneeTarget, Color.red, 0.1f);
 Debug.DrawLine(rightKneeTarget, rightTarget, Color.blue, 0.1f);```