Virtual joystick problem issue

(Help pls )im having an error when im moving the player << when turn the joystick up it goes left ,when i turn it right it goes up ,when i turned it down it goes right ,when iturned left it goes down (looks like if i go up it takes me 1 back position so it goes left ) im using scripts like this :

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;

public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
public Image bgImg, jsImg;
public Vector3 InputDirection { set; get; }

private void Start()
{
    bgImg = GetComponent<Image>();
    jsImg = GetComponentsInChildren<Image>()[1];
    InputDirection = Vector3.zero; 
}

//EventSystems interfaces
public virtual void OnDrag(PointerEventData ped)
{
    Vector2 pos = Vector2.zero;
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle
        (   bgImg.rectTransform,
            ped.position,
            ped.pressEventCamera,
            out pos))
    {
        pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
        pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);

        float x = (bgImg.rectTransform.pivot.x == 1) ? pos.x * 2 + 1 : pos.x * 2 - 1;
        float y = (bgImg.rectTransform.pivot.y == 1) ? pos.y * 2 + 1 : pos.y * 2 - 1;

        InputDirection = new Vector3(x, 0, y);
        InputDirection = (InputDirection.magnitude > 1) ? InputDirection.normalized : InputDirection;
        jsImg.rectTransform.anchoredPosition = new Vector3(InputDirection.x * (bgImg.rectTransform.sizeDelta.x / 3)
            , InputDirection.z * (bgImg.rectTransform.sizeDelta.y / 3));
    }
}
public virtual void OnPointerDown(PointerEventData ped)
{
    OnDrag(ped);
}
public virtual void OnPointerUp(PointerEventData ped)
{
    InputDirection = Vector3.zero;
    jsImg.rectTransform.anchoredPosition = Vector3.zero;
}

}

and the player script movement for the ball :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
public VirtualJoystick joystick;
public float speed = 150.0f;
private Rigidbody rigid;

private void Start()
{
    rigid = GetComponent<Rigidbody>();
}

private void Update()
{
    rigid.AddForce(joystick.InputDirection * speed * Time.deltaTime);
}

}

It seems like you are using the wrong axis of the joystick to control each axis of the player, if you are using the swap around the x and y when you perform the player input

@finlay_morrison pls help, can i fix the wrong axis? how?