精华内容
下载资源
问答
  • 坐标
    千次阅读
    更多相关内容
  • 七参数坐标转换工具(可在WGS84、北京54、西安80、CGCS2000坐标系中任意两个转换),也可以自定义参数转换
  • Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换 坐标转换是游戏开发过程中必不可少的环节 看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程,此文章中的 UI 坐标特指 UGUI 坐标 从上图可以看到,世界坐标 ...

    Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换

    坐标转换是游戏开发过程中必不可少的环节
    看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程,此文章中的 UI 坐标特指 UGUI 坐标
    在这里插入图片描述
    从上图可以看到,世界坐标 和 UI 坐标 需要通过 屏幕坐标作为中间转换媒介
    世界坐标 -> 屏幕坐标 -> UI 坐标
    UI 坐标 -> 屏幕坐标 -> 世界坐标

    屏幕坐标为 从屏幕左下角开始 坐标为 Vector2 (0, 0),
    右上角结束坐标为 Vector2(Screen.width, Screen.height)

    关于屏幕的坐标还有一个视口坐标 (Viewport)
    视口坐标为 从屏幕左下角开始 坐标为 Vector2 (0, 0),
    右上角结束坐标为 Vector2(1, 1)
    本篇省略 视口坐标的转换

    代码如下

    首先提供一个获取 UI 摄像机的方法
    UGUI 中 Canvas 的 renderMode 分为
    RenderMode.ScreenSpaceOverlay、
    RenderMode.ScreenSpaceCamera、
    RenderMode.WorldSpace

    其中 RenderMode.ScreenSpaceOverlay 不需要摄像机,其他两种需要摄像机,所以 UIManager 类需要根据 renderMode 类型处理 UICamera 的获取

    public class UIManager : MonoBehaviour
    {
        public static UIManager Instance;
        public Camera UICamera;
    
        // Start is called before the first frame update
        void Start()
        {
            Instance = this;
            Canvas canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
            if (   canvas.renderMode == RenderMode.ScreenSpaceCamera
                || canvas.renderMode == RenderMode.WorldSpace)
            {
                UICamera = canvas.worldCamera;
            }
            else if (canvas.renderMode == RenderMode.ScreenSpaceOverlay)
            {
                UICamera = null;
            }
        }
    
        public static UIManager GetInstance()
        {
            return Instance;
        }
    }
    
    using UnityEngine;
    
    public class PositionConvert
    {
    
        /// <summary>
        /// 世界坐标转换为屏幕坐标
        /// </summary>
        /// <param name="worldPoint">屏幕坐标</param>
        /// <returns></returns>
        public static Vector2 WorldPointToScreenPoint(Vector3 worldPoint)
        {
            // Camera.main 世界摄像机
            Vector2 screenPoint = Camera.main.WorldToScreenPoint(worldPoint);
            return screenPoint;
        }
    
        /// <summary>
        /// 屏幕坐标转换为世界坐标
        /// </summary>
        /// <param name="screenPoint">屏幕坐标</param>
        /// <param name="planeZ">距离摄像机 Z 平面的距离</param>
        /// <returns></returns>
        public static Vector3 ScreenPointToWorldPoint(Vector2 screenPoint, float planeZ)
        {
            // Camera.main 世界摄像机
            Vector3 position = new Vector3(screenPoint.x, screenPoint.y, planeZ);
            Vector3 worldPoint = Camera.main.ScreenToWorldPoint(position);
            return worldPoint;
        }
    
        / 
        // RectTransformUtility.WorldToScreenPoint
        // RectTransformUtility.ScreenPointToWorldPointInRectangle
        // RectTransformUtility.ScreenPointToLocalPointInRectangle
        // 上面三个坐标转换的方法使用 Camera 的地方
        // 当 Canvas renderMode 为 RenderMode.ScreenSpaceCamera、RenderMode.WorldSpace 时 传递参数 canvas.worldCamera
        // 当 Canvas renderMode 为 RenderMode.ScreenSpaceOverlay 时 传递参数 null
        
        // UI 坐标转换为屏幕坐标
        public static Vector2 UIPointToScreenPoint(Vector3 worldPoint)
        {
            // RectTransform:target
            // worldPoint = target.position;
            Camera uiCamera = UIManager.GetInstance().UICamera;
    
            Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(uiCamera, worldPoint);
            return screenPoint;
        }
    
        // 屏幕坐标转换为 UGUI 坐标
        public static Vector3 ScreenPointToUIPoint(RectTransform rt, Vector2 screenPoint)
        {
            Vector3 globalMousePos;
            //UI屏幕坐标转换为世界坐标
            Camera uiCamera = UIManager.GetInstance().UICamera;
    
            // 当 Canvas renderMode 为 RenderMode.ScreenSpaceCamera、RenderMode.WorldSpace 时 uiCamera 不能为空
            // 当 Canvas renderMode 为 RenderMode.ScreenSpaceOverlay 时 uiCamera 可以为空
            RectTransformUtility.ScreenPointToWorldPointInRectangle(rt, screenPoint, uiCamera, out globalMousePos);
            // 转换后的 globalMousePos 使用下面方法赋值
            // target 为需要使用的 UI RectTransform
            // rt 可以是 target.GetComponent<RectTransform>(), 也可以是 target.parent.GetComponent<RectTransform>()
            // target.transform.position = globalMousePos;
            return globalMousePos;
        }
    
        // 屏幕坐标转换为 UGUI RectTransform 的 anchoredPosition
        public static Vector2 ScreenPointToUILocalPoint(RectTransform parentRT, Vector2 screenPoint)
        {
            Vector2 localPos;
            Camera uiCamera = UIManager.GetInstance().UICamera;
    
            RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRT, screenPoint, uiCamera, out localPos);
            // 转换后的 localPos 使用下面方法赋值
            // target 为需要使用的 UI RectTransform
            // parentRT 是 target.parent.GetComponent<RectTransform>()
            // 最后赋值 target.anchoredPosition = localPos;
            return localPos;
        }
    
    }
    
    

    使用方法如下

    世界坐标 -> 屏幕坐标

        GameObject go = GameObject.Find("GO");
        Vector2 screenPoint = PositionConvert.WorldPointToScreenPoint(go.transform.position);
    

    屏幕坐标-> 世界坐标

        Vector2 screenPoint = new Vector2(100, 100);
        // 距离摄像机 Z 轴方向距离为 10
        float planeZ = 10; 
        Vector3 worldPoint = PositionConvert.ScreenPointToWorldPoint(screenPoint, planeZ);
    

    UI 坐标 -> 屏幕坐标

        // 获取 UGUI 组件 transform
        Transform dst = GameObject.Find("Canvas/Panel/Image").transform;
        // 将 UI transform.position 坐标转换为屏幕坐标
        Vector2 screenPoint = PositionConvert.UIPointToScreenPoint(dst.position);
    

    屏幕坐标 -> UI 坐标 方法一

        GameObject target = GameObject.Find("Canvas/Panel1/target");
        RectTransform rt = target.GetComponent<RectTransform>();
    
        // 将屏幕坐标转换为 UI transform.position
        Vector3 uiPoint = PositionConvert.ScreenPointToUIPoint(rt, screenPoint);
        target.transform.position = uiPoint;
    

    屏幕坐标 -> UI 坐标 方法二

        GameObject target = GameObject.Find("Canvas/Panel1/target");
        RectTransform targetRt = target.GetComponent<RectTransform>();
    
        // target Parent
        Transform parent = target.transform.parent;
        RectTransform parentRt = parent.GetComponent<RectTransform>();
    
        // 将屏幕坐标转换为 UI transform.position
        Vector3 uiPoint = PositionConvert.ScreenPointToUILocalPoint(parentRt, screenPoint);
        targetRt.anchoredPosition = uiPoint;
    

    代码中注释比较详细,就不细说了,使用上面方法,无论 Canvas 的 renderMode 使用哪种类型,代码执行结果都是正确的

    展开全文
  • 坐标方程化为直角坐标方程

    千次阅读 2021-01-30 19:12:29
    坐标方程与直角坐标的转化23.(本小题满分 10 分)选修 4-4:坐标 系与参数方程 在直角坐标系 xOy 中, 直线 C1: x=-2, 圆 C2:(x-1)2+(y-2)2=1,以坐标原点为 极点,x 轴的正半轴为极轴建立极坐标系....

    极坐标方程与直角坐标的转化

    23.(本小题满分 10 分)选修 4-4:坐标 系与参数方程 在直角坐标系 xOy 中, 直线 C1: x=-2, 圆 C2:(x-1)2+(y-2)2=1,以坐标原点为 极点,x 轴的正半轴为极轴建立极坐标系. (1)求 C1,C2 的极坐标方程; π (2)若直线 C3 的极坐标方程为 θ=4(ρ∈ R),设 C2 与 C3 的交点为 M,N,求△C2MN 的面积.

    2016-07-15

    10035人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    互化条件:极点与原点重合,极轴与 x 轴正半轴重合,长度单位相同.

    互化公式:

    x

    y

    cos s in

    2 x2 y2

    tan

    y x

    (x

    0)

    θ的象限由点(x,y)所在的象限确定.

    例 1.⊙O1 和⊙O2 的极坐标方程分别为 4cos , 4sin .

    (I)把⊙O1 和⊙O2 的极坐标方程化为直角坐标方程; (II)求经过⊙O1,⊙O2 交点的直线的直角坐标方程.

    练习:曲线的极坐标方程 =4sin 化成直角坐标方程为

    (A) x2+(y+2)2=4

    (B) x2+(y-2)2=4

    (C) (x-2)2+y2=4

    (D) (x+2)2+y2=4

    二、已知曲线的极坐标方程,判断曲线类型 常见的直线和圆的极坐标方程及极坐标系中的旋转不变性:

    1、直线的极坐标方程(a>0) (1)过极点,并且与极轴成α角的直线的极坐标方程: =α; (2)垂直于极轴和极点间的距离为 a 的直线的极坐标方程: cos =a;

    (3)平行于极轴和极轴间的距离为 a 的直线的极坐标方程: sin =a;

    (4)不过极点,和极轴成 角,到极点距离为 a 的直线的极坐标方程:

    sin(α-θ)=a.

    2、圆的极坐标方程(a>0) (1)圆心在极点,半径为 a 的圆的极坐标方程: =a;

    (2)圆心在(a,0),半径为 a 的圆的极坐标方程: =2acos ;

    (3)圆心在(a, ),半径为 a 的圆的极坐标方程: = 2a cos ;

    (4)圆心在(a, ),半径为 a 的圆的极坐标方程: =2asin ; 2

    (5)圆心在(a, 3 ),半径为 a 的圆的极坐标方程: = 2asin ; 2

    (6)圆心在(a, 0),半径为 a 的圆的极坐标方程: =2acos( - 0).

    3、极坐标系中的旋转不变性:

    曲线 f( , + )=0 是将曲线 f( , )=0 绕极点旋转| |角( 0时,按顺

    时针方向旋转, 0 时,按逆时针方向旋转)而得到.

    例 2.极坐标方程 4 sin2 =5 所表示的曲线是( ) 2

    (A)圆

    (B)椭圆

    (C)双曲线的一支 (D)抛物线

    练习:极坐标方程 =c

    2020-04-05

    944人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    1.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    在极坐标系下,已知圆 O: cos sin 和直线 l : sin( ) 2 , 42

    (1)求圆 O 和直线 l 的直角坐标方程;

    (2)当 0, 时,求直线 l 与圆 O 公共点的一个极坐标.

    2.(选修 4—4:坐标系与参数方程)已知曲线 C 的极坐标方程是 2sin ,设

    直线

    l

    的参数方程是

    x

    y

    4 5

    3 5

    t

    t

    2

    (

    t

    为参数)。

    (1)将曲线 C 的极坐标方程转化为直角坐标方程;

    (2)设直线 l 与 x 轴的交点是 M,N 为曲线 C 上一动点,求|MN|的最大值。

    3.(本小题满分 10 分)选 修 4—4:坐标系与参数方程

    已知曲线 C 的极坐标方程为 2

    36

    4 cos2 9sin2

    (1)若以极点为原点,极轴所在的直线为 x 轴,求曲线 C 的直角坐标方程;

    (2)若 P(x, y) 是曲线 C 上的一个动点,求 3x 4y 的最大值。

    5.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    已知直线 l 经过点 P(1,1) ,倾斜角 。 6

    (1) 写出直线 l 的参数方程;

    (2)

    l

    与圆

    x y

    2 cos 2 sin

    (

    是参数)相交于两点

    A、B,求点

    P

    A、B

    两点的

    距离之积。

    6.(本题满分 lO 分) 4—4(坐标系与参数方程)

    在直角坐标系 xOy 中,以 O 为极点, x 轴正半轴为极轴建立极坐标系,直线 l 的极方程

    为 sin( ) 4

    2 2

    .圆

    O

    的参数方程为

    x y

    2 r cos

    2

    ,( 为参数, r 0 )

    2 r sin

    2

    (I)求圆心的极坐标;

    (Ⅱ)当 r 为何值时,圆 O 上的点到直线 Z 的最大距离为 3. 6. (1)圆心坐标为 ( 2 , 2 )

    22 设圆心的极坐标为 (, )

    ------ 1 分

    则 ( 2 )2 ( 2 )2 1

    2

    2

    所以圆心的极坐标为 (1, 5 ) 4

    (2)直线 l 的极坐标方程为 (

    2020-03-26

    133人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    1.(本小题满分 10 分)选修 4—4:坐标系与参数方程 在极坐标系下,已知圆 O:和直线, (1)求圆 O 和直线的直角坐标方程; (2)当时,求直线与圆 O 公共点的一个极坐标.

    2.(选修 4—4:坐标系与参数方程)已知曲线 C 的极坐标方程是 2sin ,设

    直线

    l

    的参数方程是

    x

    y

    4 5

    3 5

    t

    t

    2

    (

    t

    为参数)。

    (1)将曲线 C 的极坐标方程转化为直角坐标方程; (2)设直线 l 与 x 轴的交点是 M,N 为曲线 C 上一动点,求|MN|的最大值。

    3.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    已知曲线 C

    的极坐标方程为 2

    36 4 cos2 9sin2

    (1)若以极点为原点,极轴所在的直线为 x 轴,求曲线 C 的直角坐标方程;

    (2)若 P(x, y) 是曲线 C 上的一个动点,求 3x 4y 的最大值。

    5.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    已知直线 l 经过点 P(1,1) ,倾斜角 。 6

    (1) 写出直线 l 的参数方程;

    (2)

    l

    与圆

    x y

    2 cos 2 sin

    (

    是参数)相交于两点

    A、B,求点

    P

    A、B

    两点的距

    离之积。

    6.(本题满分 lO 分) 4—4(坐标系与参数方程)

    在直角坐标系 xOy 中,以 O 为极点, x 轴正半轴为极轴建立极坐标系,直线 l 的极方程

    为 sin( ) 4

    2 2

    .圆

    O

    的参数方程为

    x

    y

    2 r cos

    2

    ,( 为参数, r 0 )

    2 r sin

    2

    (I)求圆心的极坐标;

    (Ⅱ)当 r 为何值时,圆 O 上的点到直线 Z 的最大距离为 3. 6. (1)圆心坐标为 ( 2 , 2 )

    22 设圆心的极坐标为 (, )

    则 ( 2 )2 ( 2 )2 1

    2

    2

    ------ 1 分 -----2 分

    所以圆心的极坐标为 (1, 5 ) 4

    (2)直线 l 的极坐标方程为 ( 2 sin 2 cos ) 2

    2

    2

    2

    直线

    2020-04-12

    187人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    1.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    在极坐标系下,已知圆 O: cos sin 和直线 l : sin( ) 2 , 42

    (1)求圆 O 和直线 l 的直角坐标方程;

    (2)当 0, 时,求直线 l 与圆 O 公共点的一个极坐标.

    2.(选修 4—4:坐标系与参数方程)已知曲线 C 的极坐标方程是 2sin ,设直线 l

    的参数方程是

    x

    y

    4 5

    3 5

    t

    t

    2

    (

    t

    为参数)。

    (1)将曲线 C 的极坐标方程转化为直角坐标方程;

    (2)设直线 l 与 x 轴的交点是 M,N 为曲线 C 上一动点,求|MN|的最大值。

    3.(本小题满分 10 分)选 修 4—4:坐标系与参数方程

    已知曲线 C

    的极坐标方程为 2

    36 4 cos2 9sin2

    (1)若以极点为原点,极轴所在的直线为 x 轴,求曲线 C 的直角坐标方程;

    (2)若 P(x, y) 是曲线 C 上的一个动点,求 3x 4y 的最大值。

    5.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    已知直线 l 经过点 P(1,1) ,倾斜角 。 6

    (1) 写出直线 l 的参数方程;

    (2)

    l

    与圆

    x y

    2 cos 2 sin

    (

    是参数)相交于两点

    A、B,求点

    P

    A、B

    两点的距离之积。

    6.(本题满分 lO 分) 4—4(坐标系与参数方程)

    在直角坐标系 xOy 中,以 O 为极点, x 轴正半轴为极轴建立极坐标系,直线 l 的极方程

    为 sin( ) 4

    2 2

    .圆

    O

    的参数方程为

    x y

    2 r cos

    2

    ,( 为参数, r 0 )

    2 r sin 2

    (I)求圆心的极坐标;

    (Ⅱ)当 r 为何值时,圆 O 上的点到直线 Z 的最大距离为 3.

    6. (1)圆心坐标为 ( 2 , 2 ) 22

    ------ 1 分

    设圆心的极坐标为 (, )

    则 ( 2 )2 ( 2 )2 1

    2

    2

    所以圆心的极坐标为 (1, 5 ) 4

    (2)直线 l 的极坐标方程为

    2020-04-02

    79人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    1.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    在极坐标系下,已知圆 O: cos sin 和直线 l : sin( ) 2 ,

    42

    (1)求圆 O 和直线l 的直角坐标方程;

    (2)当 0, 时,求直线l 与圆 O 公共点的一个极坐标.

    2.(选修 4—4:坐标系与参数方程)已知曲线 C 的极坐标方程是 2sin ,设直线 l 的

    参数方程是

    x

    y

    4 5

    3 5

    t

    t

    2

    (

    t

    为参数)。

    (1)将曲线 C 的极坐标方程转化为直角坐标方程;

    (2)设直线 l 与 x 轴的交点是 M,N 为曲线 C 上一动点,求|MN|的最大值。

    3.(本小题满分 10 分)选 修 4—4:坐标系与参数方程

    已知曲线 C

    的极坐标方程为 2

    36 4 cos2 9sin2

    (1)若以极点为原点,极轴所在的直线为 x 轴,求曲线 C 的直角坐标方程;

    (2)若 P(x, y) 是曲线 C 上的一个动点,求 3x 4y 的最大值。

    5.(本小题满分 10 分)选修 4—4:坐标系与参数方程 已知直线 l 经过点 P(1,1) ,倾斜角 。

    6

    (1)写出直线l 的参数方程;

    (2) 设

    l

    与圆

    x y

    2 cos 2 sin

    (

    是参数)相交于两点

    A、B,求点

    P

    A、B

    两点的距离之积。

    6.(本题满分 lO 分)

    4—4(坐标系与参数方程)

    在直角坐标系 xOy 中,以 O 为极点, x 轴正半轴为极轴建立极坐标系,直线l

    的极方程

    为 sin( )

    4

    2 2

    .圆

    O

    的参数方程为

    x

    y

    2 r cos

    2

    ,( 为参数, r 0 )

    2 r sin

    2

    (I)求圆心的极坐标;

    (Ⅱ)当 r 为何值时,圆 O 上的点到直线 Z 的最大距离为 3.

    6.

    (

    1

    )

    ( 2 , 2 )

    22

    ------ 1 分

    设圆心的极坐标为 (, )

    ( 2 )2 ( 2 )2 1

    2

    2

    -----2 分

    所 以 圆 心 的 极

    2020-04-19

    129人浏览

    极坐标方程与直角坐标方程的互化

    一、极坐标方程与直角坐标方程的互化

    1.(本小题满分 10 分)选修 4—4:坐标系与参数方程

    在极坐标系下,已知圆 O: cos sin 和直线 l : sin( ) 2 ,

    42

    (1)求圆 O 和直线l 的直角坐标方程;

    (2)当 0, 时,求直线l 与圆 O 公共点的一个极坐标.

    2.(选修 4—4:坐标系与参数方程)已知曲线 C 的极坐标方程是 2sin ,设直线 l 的

    参数方程是

    x

    y

    4 5

    3 5

    t

    t

    2

    (

    t

    为参数)。

    (1)将曲线 C 的极坐标方程转化为直角坐标方程;

    (2)设直线 l 与 x 轴的交点是 M,N 为曲线 C 上一动点,求|MN|的最大值。

    3.(本小题满分 10 分)选 修 4—4:坐标系与参数方程

    已知曲线 C

    的极坐标方程为 2

    36 4 cos2 9sin2

    (1)若以极点为原点,极轴所在的直线为 x 轴,求曲线 C 的直角坐标方程;

    (2)若 P(x, y) 是曲线 C 上的一个动点,求 3x 4y 的最大值。

    5.(本小题满分 10 分)选修 4—4:坐标系与参数方程 已知直线 l 经过点 P(1,1) ,倾斜角 。

    6

    (1)写出直线l 的参数方程;

    (2) 设

    l

    与圆

    x y

    2 cos 2 sin

    (

    是参数)相交于两点

    A、B,求点

    P

    A、B

    两点的距离之积。

    6.(本题满分 lO 分)

    4—4(坐标系与参数方程)

    在直角坐标系 xOy 中,以 O 为极点, x 轴正半轴为极轴建立极坐标系,直线l

    的极方程

    为 sin( )

    4

    2 2

    .圆

    O

    的参数方程为

    x

    y

    2 r cos

    2

    ,( 为参数, r 0 )

    2 r sin

    2

    (I)求圆心的极坐标;

    (Ⅱ)当 r 为何值时,圆 O 上的点到直线 Z 的最大距离为 3.

    6.

    (

    1

    )

    ( 2 , 2 )

    22

    ------ 1 分

    设圆心的极坐标为 (, )

    ( 2 )2 ( 2 )2 1

    2

    2

    -----2 分

    所 以 圆 心 的 极

    2020-04-27

    36人浏览

    展开全文
  • 2021SC@SDUSC secp256k1曲线——Affine到Jacobian的转换 Affine 仿射坐标 Projection射影坐标 标准射影坐标 Jacobian加重射影坐标 libsecp256k1的坐标转换 在libsecp256k1比特币密码算法开源库(四)中定义了有限域...

    2021SC@SDUSC

    libsecp256k1比特币密码算法开源库(四)中定义了有限域下椭圆曲线的相关运算,在那一篇中对于椭圆曲线几何加法运算的过程有了非常详细的说明。但是在那一篇中,对与不同的两点P和Q,计算其几何加法结果R必须要经过非常重要的一步,即求斜率m:
    m = y P − y Q x P − x Q   m o d   p = ( y P − y Q ) ( x P − x Q ) − 1 m o d   p m=\frac{y_P-y_Q}{x_P-x_Q} \,mod\,p=(y_P-y_Q)(x_P-x_Q)^{-1} mod\,p m=xPxQyPyQmodp=(yPyQ)(xPxQ)1modp在这一步中不可避免地要求一个乘法逆元,即 ( x P − x Q ) − 1 (x_P-x_Q)^{-1} (xPxQ)1。计算乘法逆元可以使用扩展欧几里得算法,这个开销或许不是很大,但这里的 x P x_P xP x Q x_Q xQ都是非常大的数(BigInt),用扩展欧几里得算法计算相应的乘法逆元是非常困难的。除此之外,计算椭圆曲线的标量乘法也有非常关键的一步,也就是计算最开始两个相同数的几何加法,其中也要计算斜率m:
    m = 3 x P 2 + a 2 y P   m o d   p = ( 3 x P 2 + a ) ( 2 y P ) − 1   m o d   p m =\frac {3 x_P^2 + a} { 2 y_P }\, mod\,p=(3 x_P^2 + a)(2 y_P)^{-1}\, mod\,p m=2yP3xP2+amodp=(3xP2+a)(2yP)1modp在这一步中还是不可避免地要求乘法逆元 ( 2 y P ) − 1 (2 y_P)^{-1} (2yP)1

    除此之外,在介绍椭圆曲线群中的元素中,除了那些满足椭圆曲线方程具有横纵坐标的点之外,我还提到一个“无穷远点”。这个无穷远点从何而来,本文将会进行解答。

    那么在实际算法实现过程中,避开扩展欧几里得算法,以求更加快速高效地求大数的乘法逆元是很重要的一个问题。实际上,在椭圆曲线上点的表示有两种形式:仿射坐标Affine表示和射影坐标Projection表示,通过将椭圆曲线上的点坐标从仿射坐标转换到射影坐标中,就可以巧妙地避开扩展欧几里得算法。下面开始:

    Affine 仿射坐标

    虽然这里给仿射坐标放了一个title,但其实这里已经没有必要给仿射坐标讲太多东西了。之前几篇讲的椭圆曲线的方程表示和坐标运算其实都是基于仿射坐标的。也就是说,椭圆曲线的仿射方程就是 y 2 = x 3 + a x + b y^2=x^3+ax+b y2x3axb,在有限域中,这个方程也就表达为 y 2 = ( x 3 + a x + b )   m o d   p y^2=(x^3+ax+b)\,mod\,p y2(x3axb)modp。也就是说,在仿射坐标下才存在要使用扩展欧几里得算法求解乘法逆元的问题。

    Projection射影坐标

    射影坐标分为:标准射影坐标、Jacobian加重射影坐标、Chudnovsky射影坐标。在椭圆曲线中使用的是Jacobian加重射影坐标,Chudnovsky射影坐标和这里的椭圆曲线没什么关系,所以不讲它。为了说明白Jacobian加重射影坐标,先从最基本的标准射影坐标开始。

    标准射影坐标

    在仿射坐标中,我们有椭圆曲线方程: y 2 = x 3 + a x + b y^2=x^3+ax+b y2x3axb,对应点的坐标就是 ( x , y ) (x,y) (x,y),射影坐标是三维的,一个点的坐标表示为 ( x , y , z ) (x,y,z) (x,y,z)。这里我们规定:
    在标准射影坐标中,点 ( x , y , z ) (x,y,z) (x,y,z)对应仿射坐标中的点 ( x z , y z ) (\frac xz,\frac yz) (zx,zy)
    同理有,在仿射坐标中的点 ( x , y ) (x,y) (x,y)对应标准射影坐标中的点 ( x , y , 1 ) (x,y,1) (x,y,1)

    有了这样的一个对应关系,我们令椭圆曲线方程 y 2 = x 3 + a x + b   y^2=x^3+ax+b\, y2x3axb   x = x z   \,x=\frac xz\, x=zx   y = y z   \,y=\frac yz\, y=zy就得到了标准射影坐标中的椭圆曲线方程: y 2 z = x 3 + a x z 2 + b z 3   y^2z=x^3+axz^2+bz^3\, y2zx3axz2bz3可以看到,由于点 ( x , y , z ) (x,y,z) (x,y,z)对应仿射坐标中的点 ( x z , y z ) (\frac xz,\frac yz) (zx,zy),这就使得z不能为0,如果z为零,在射影坐标中的点 ( 0 , y , 0 ) (0,y,0) (0,y,0)就找不到一个对应的仿射坐标值。但实际上椭圆曲线的点还是以射影坐标为准,也就是说就是有这样一个点 ( 0 , y , 0 ) (0,y,0) (0,y,0),于是在仿射坐标中称这个点为“无穷远点”,也就是在射影坐标中这个z=0的点。

    有了上面的从仿射坐标到标准射影坐标的映射关系,可以定义在标准射影坐标下的几何加法运算。令P和Q为不相等的两点, P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1) Q ( x 2 , y 2 , z 2 ) Q(x_2,y_2,z_2) Q(x2,y2,z2),令 R ( x 3 , y 3 , z 3 ) R(x_3,y_3,z_3) R(x3,y3,z3),且R=P+Q(几何加法运算),标准射影坐标下的几何加法运算过程如下: λ 1 = x 1 z 2 λ 2 = x 2 z 1 λ 3 = λ 1 − λ 2 λ 4 = y 1 z 2 λ 5 = y 2 z 1 λ 6 = λ 4 − λ 5 λ 7 = λ 1 + λ 2 λ 8 = z 1 z 2 λ 9 = λ 3 2 λ 10 = λ 3 λ 9 λ 11 = λ 8 λ 6 2 − λ 7 λ 9 x 3 = λ 3 λ 11 y 3 = λ 6 ( λ 9 λ 1 − λ 11 ) − λ 4 λ 10 z 3 = λ 10 λ 8 \lambda_1=x_1z_2\\\lambda_2=x_2z_1\\\lambda_3=\lambda_1-\lambda_2\\\lambda_4=y_1z_2\\\lambda_5=y_2z_1\\\lambda_6=\lambda_4-\lambda_5\\\lambda_7=\lambda_1+\lambda_2\\\lambda_8=z_1z_2\\\lambda_9=\lambda_3^2\\\lambda_{10}=\lambda_3\lambda_9\\\lambda_{11}=\lambda_8\lambda_6^2-\lambda_7\lambda_9\\x_3=\lambda_3\lambda_{11}\\y_3=\lambda_6(\lambda_9\lambda_1-\lambda_{11})-\lambda_4\lambda_{10}\\z_3=\lambda_{10}\lambda_{8} λ1=x1z2λ2=x2z1λ3=λ1λ2λ4=y1z2λ5=y2z1λ6=λ4λ5λ7=λ1+λ2λ8=z1z2λ9=λ32λ10=λ3λ9λ11=λ8λ62λ7λ9x3=λ3λ11y3=λ6(λ9λ1λ11)λ4λ10z3=λ10λ8最后得到的 x 3 , y 3 , z 3 x_3,y_3,z_3 x3,y3,z3即为得到的R点标准射影坐标。

    对于标量乘法中,我们首先需要计算两个相等点P+P,即计算2P,令 P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1) R ( x 3 , y 3 , z 3 ) R(x_3,y_3,z_3) R(x3,y3,z3),标准射影坐标运算过程如下:
    λ 1 = 3 x 1 2 + a z 1 2 λ 2 = 2 y 1 z 1 λ 3 = y 1 2 λ 4 = λ 3 x 1 z 1 λ 5 = λ 2 2 λ 6 = λ 1 2 − 8 λ 4 x 3 = λ 2 λ 6 y 3 = λ 1 ( 4 λ 4 − λ 6 ) − 2 λ 5 λ 3 z 3 = λ 2 λ 5 λ_1 = 3x_1^2 +az^2_1\\λ_2 = 2y_1z_1\\λ_3 = y^2_1\\λ_4 = λ_3x_1z_1\\λ_5 = λ_2^2\\λ_6 = λ^2_1 −8λ_4\\ x_3 = λ_2λ_6\\y_3 = λ_1(4λ_4 −λ_6)−2λ_5λ_3\\z_3 = λ_2λ_5 λ1=3x12+az12λ2=2y1z1λ3=y12λ4=λ3x1z1λ5=λ22λ6=λ128λ4x3=λ2λ6y3=λ1(4λ4λ6)2λ5λ3z3=λ2λ5最后得到的 x 3 , y 3 , z 3 x_3,y_3,z_3 x3,y3,z3即为得到的R点标准射影坐标。

    上面的公式对于libsecp256k1开源库其实意义不大,在libsecp256k1开源库中使用的射影坐标是Jacobian加重射影坐标。

    Jacobian加重射影坐标

    Jacobian加重射影坐标与标准射影坐标方法类似,在Jacobian加重射影坐标中,一个射影点的坐标表示为 ( x , y , z ) (x,y,z) (x,y,z),这里我们规定:
    在Jacobian加重射影坐标,点 ( x , y , z ) (x,y,z) (x,y,z)对应仿射坐标中的点 ( x z 2 , y z 3 ) (\frac {x}{z^2},\frac {y}{z^3}) (z2x,z3y)
    同理有,在仿射坐标中的点 ( x , y ) (x,y) (x,y)对应Jacobian加重射影坐标中的点 ( x , y , 1 ) (x,y,1) (x,y,1)

    有了这样的一个对应关系,我们令椭圆曲线方程 y 2 = x 3 + a x + b   y^2=x^3+ax+b\, y2x3axb   x = x z 2   \,x=\frac {x}{z^2}\, x=z2x   y = y z 3   \,y=\frac {y}{z^3}\, y=z3y就得到了Jacobian加重射影坐标中的椭圆曲线方程: y 2 = x 3 + a x z 4 + b z 6   y^2=x^3+axz^4+bz^6\, y2x3axz4bz6同样可以看到,由于点 ( x , y , z ) (x,y,z) (x,y,z)对应仿射坐标中的点 ( x z 2 , y z 3 ) (\frac {x}{z^2},\frac {y}{z^3}) (z2x,z3y),当z为零,有射影坐标中的点 ( x , y , 0 ) (x,y,0) (x,y,0),该点同样的在仿射坐标中称为“无穷远点”,也就是在射影坐标中这个z=0的点。

    有了上面的从仿射坐标到Jacobian加重射影坐标的映射关系,可以定义在Jacobian加重射影坐标下的几何加法运算。令P和Q为不相等的两点, P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1) Q ( x 2 , y 2 , z 2 ) Q(x_2,y_2,z_2) Q(x2,y2,z2),令 R ( x 3 , y 3 , z 3 ) R(x_3,y_3,z_3) R(x3,y3,z3),且R=P+Q(几何加法运算),Jacobian加重射影坐标下的几何加法运算过程如下: λ 1 = x 1 z 2 2 λ 2 = x 2 z 1 2 λ 3 = λ 1 − λ 2 λ 4 = y 1 z 2 3 λ 5 = y 2 z 1 3 λ 6 = λ 4 − λ 5 λ 7 = λ 1 + λ 2 λ 8 = λ 4 + λ 5 x 3 = λ 6 2 − λ 7 λ 3 2 λ 9 = λ 7 λ 3 2 − 2 x 3 y 3 = ( λ 9 λ 6 − λ 8 λ 3 3 ) / 2 z 3 = z 1 z 2 λ 3 λ_1=x_1z_2^2\\λ_2=x_2z_1^2\\λ_3 = λ_1 −λ_2\\λ_4 = y_1z^3_2\\λ_5 = y_2z^3_1\\λ_6 = λ_4 −λ_5\\λ_7 = λ_1 +λ_2\\ λ_8 = λ_4 +λ_5\\x_3 = λ^2_6 −λ_7λ^2_3\\λ_9 = λ_7λ^2_3 −2x_3\\y_3 = (λ_9λ_6 −λ_8λ_3^3)/2\\z_3 = z_1z_2λ_3 λ1=x1z22λ2=x2z12λ3=λ1λ2λ4=y1z23λ5=y2z13λ6=λ4λ5λ7=λ1+λ2λ8=λ4+λ5x3=λ62λ7λ32λ9=λ7λ322x3y3=(λ9λ6λ8λ33)/2z3=z1z2λ3最后得到的 x 3 , y 3 , z 3 x_3,y_3,z_3 x3,y3,z3即为得到的R点Jacobian加重射影坐标。

    对于标量乘法中,我们首先需要计算两个相等点P+P,即计算2P,令 P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1) P(x1,y1,z1) R ( x 3 , y 3 , z 3 ) R(x_3,y_3,z_3) R(x3,y3,z3),Jacobian加重射影坐标运算过程如下:
    λ 1 = 3 x 1 2 + a z 1 4 λ 2 = 4 x 1 y 1 2 λ 3 = 8 y 1 4 x 3 = λ 1 2 − 2 λ 2 y 3 = λ 1 ( λ 2 − x 3 ) − λ 3 z 3 = 2 y 1 z 1 λ_1 = 3x_1^2 +az^4_1\\λ_2 = 4x_1y^2_1\\λ_3 = 8y^4_1\\x_3 = λ^2_1 −2λ_2\\y_3 = λ_1(λ_2 −x_3)−λ_3\\z_3 = 2y_1z_1 λ1=3x12+az14λ2=4x1y12λ3=8y14x3=λ122λ2y3=λ1(λ2x3)λ3z3=2y1z1最后得到的 x 3 , y 3 , z 3 x_3,y_3,z_3 x3,y3,z3即为得到的R点Jacobian加重射影坐标。

    可以看到,在这两个过程中没有除法运算,也就不需要定义乘法逆元。那么这时候想要避开扩展欧几里得算法求乘法逆元就很简单了:只需将椭圆曲线在仿射坐标中的点,转化为在射影坐标中的点,用射影坐标几何加法运算得到结果点,最后再把这个点的射影坐标转化为仿射坐标就可以了。

    libsecp256k1的坐标转换

    在libsecp256k1中就采用了从仿射坐标到射影坐标再到仿射坐标的过程。
    libsecp256k1采用的坐标就是Jacobian加重射影坐标。这个方法避开了扩展欧几里得算法求乘法逆元,大大提高了算法效率。

    同时注意,在secp256k1中定义椭圆曲线参数a=0,b=7,那么就可以得到Jacobian射影坐标中的secp256k1椭圆曲线方程: y 2 = x 3 + 7 z 6   y^2=x^3+7z^6\, y2x37z6同样地,把a=0代入到上面Jacobian加重射影坐标几何加法运算公式中,就可以得到secp256k1在射影坐标中的几何加法运算过程。

    展开全文
  • 世界坐标系,相机坐标系和图像坐标系的转换(Python)

    万次阅读 多人点赞 2020-02-05 16:45:40
    世界坐标系,相机坐标系和图像坐标系的转换(Python) 相机内参外参说明:https://panjinquan.blog.csdn.net/article/details/102502213 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系...
  • 背景:从GPS和北斗卫星定位得到的定位数据采用的都是WGS84坐标系,即地球坐标系,但是国内不管是高德地图、百度地图采用的并不是WGS84坐标系,所以需要经过转换后才能使用,前端用百度API提供的方法转换速度较慢。...
  • 相机的畸变可以由非线性模型来表示, 由于公式比较复杂, 对于推导过程, 此处将 不再赘述, 最后给出简化后的畸变模型: 其中(X,Y,Z)为世界坐标系下的坐标, (x,y,x)为相机坐标系下的坐标, 归一化为(x’,y’), ...
  • 本文主要是对像素坐标转投影坐标、投影坐标转像素坐标的原理进行介绍及代码上的实现!!! 一、.tif 影像基本信息介绍 1、影像借本信息 上图是我使用 QGIS 打开的一副遥感影像的基本属性,上图中 (CRS)...
  • 原标题:详解| 带你认识新一代坐标系——2000国家大地坐标系2018年7月1日起全面使用2000国家大地坐标系的消息,让不少人感慨国之大动作的同时,纷纷摸不着头脑。何为2000国家大地坐标系?对日常工作生活会有什么影响...
  • 浙江省第一测绘院 杭州 310012摘要:国家测绘局2008年6月18日发公告,要求2008年7月1日起,正式启用2000国家大地坐标系。本文结合我省某市2000国家大地坐标系转换实施情况,简述城市坐标系到2000国家大地坐标系转换...
  • ROS中的坐标坐标系转换

    千次阅读 2020-10-04 15:05:29
    坐标转换是一个坐标在不同坐标系下的表示,而坐标系转换不同坐标系的相对位姿关系。 ROS中机器人模型包含大量的部件,每一个部件统称之为link(比如手部、头部、某个关节、某个连杆),每一个link上面对应着一个frame...
  • C# 绘制实时曲线包括绘制坐标

    千次下载 热门讨论 2014-08-06 02:08:35
    C# 绘制实时曲线及坐标轴,实现实时的图像处理操作。
  • 天文坐标系转换

    万次阅读 2021-06-14 21:08:53
    天文坐标系转换黄道坐标系赤道坐标系银道坐标坐标系转换转换公式 - λ\lambdaλ,β⟶\beta \longrightarrowβ⟶ α,δ\alpha, \deltaα,δ转换公式 - α,δ⟶\alpha, \delta \longrightarrowα,δ⟶ λ\lambdaλ,$...
  • 导航中的几种常用坐标系 地心惯性坐标系(ECI) 地心地固坐标系(ECEF) 当地水平坐标系(LLF)、东北天坐标系ENU 地平坐标系 载体/机体坐标系 机动目标跟踪/室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易...
  • 详解Unity中的各种坐标

    千次阅读 2022-04-17 15:14:28
    在Unity中有很多坐标系,诸如世界坐标系、局部坐标系、屏幕坐标系、视口坐标系等等,这些坐标系往往会给新手(我)带来很大的困扰,但又缺一不可。比如当你需要获取鼠标在世界坐标的位置时,你就需要明白什么是世界...
  • 在我们的屏幕上,有一张地图,这张地图经过缩放、平移、旋转,最终地理坐标和屏幕坐标的关系大致如下图所示: 这种关系要怎么描述呢?我们可以假设地图是一张纸,而屏幕是一堵墙。只要我们有两个图钉,我们就能把...
  • 立体视觉入门指南(1):坐标系与相机参数

    千次阅读 多人点赞 2021-01-31 21:07:39
    本课程将带大家由浅入深的了解立体视觉的理论与实践知识。我们会从坐标系讲到相机标定,从被动式立体讲到主动式立体,甚至可能从深度恢复讲到网格构建与处理,感兴趣的同学们,来和我一起探索立体视觉的魅力吧!
  • 如题,需要一个简单的公式 哪位达人直接告诉我一、用EXCEL进行高斯投影换算 从经纬度BL换算到高斯平面直角坐标XY(高斯投影正算),或从XY换算成BL(高斯投影反 算),一般需要专用计算机软件完成,在目前....
  • 经纬高坐标系-ECEF坐标系-ENU坐标

    万次阅读 2019-11-29 11:41:35
    无人机搭载的RTK获得的经纬高坐标要转换为东北天坐标,才能用于局部的导航和定位。为了这个目的,查阅资料,越查越懵逼,竟然这么多的坐标系,略懂之后,将学到的信息记录如下,很多跟我的目的:”RTK的LBH坐标转换...
  • 从地方坐标系到2000国家大地坐标系的转换按照国务院关于推广使用2000国家大地坐标系的有关要求,之前国土资源部(现自然资源部)确定,2018年6月底前完成全系统各类国土资源空间数据向2000国家大地坐标系转换,2018年7...
  • Unity-世界坐标与屏幕坐标

    千次阅读 2022-03-19 14:31:16
    transform.position.x和transform.position.y的值含义是世界坐标。 世界坐标与屏幕坐标有时一样,有时不同,这和Canvas的渲染模式有关。 Canvas共有三种渲染模式 Screen Space - Overlay (此模式UGUI层一直在最上面...
  • 详解坐标变换矩阵

    万次阅读 多人点赞 2021-12-27 22:54:28
    在高级驾驶辅助系统(ADAS)领域,存在多种常用的坐标系:LiDAR坐标系、车身坐标系、相机坐标系、图像坐标系等。在本人最近的实习过程中,和这些坐标系频繁打交道。这是本人第一次在CSDN发文,本文详细总结坐标变换...
  • 注意要搞清楚当前坐标属于哪种坐标,然后,相对指定的Camera转化 using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 关于坐标相对Camera的转换 /// 这里说...
  • 我国曾经采用过1954北京坐标系和1980西安坐标系作为国家大地坐标系, 但是随着科技的进步,特别是GPS技术和新的大地测量技术的发展, 原有两种坐标系都不是基于以地球质量中心为原点的坐标系统, 不能适应新时期国民经济...
  • Polar Chart 极坐标图绘制
  • 坐标转换】——基础知识与公式

    千次阅读 2020-08-04 17:40:07
    空间直角坐标系 空间直角坐标系的坐标原点与参考椭球的中心重合,Z轴正向指向参考椭球的北极,X轴正向指向起始子午面与赤道的交点,Y轴按右手系与X轴呈90°夹角且位于赤道面上,某点在空间中的坐标可用该点在此空间...
  • matlab中plot()画图时如何指定X Y轴的范围可以用matlab提供的坐标轴设置函数axis进行设置(对当前坐标轴进行设置),具体用法如下:plot(x, y); // 画图后用axis函数设置坐标轴的范围axis([xmin xmax ymin ymax]); % ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,389,881
精华内容 555,952
关键字:

坐标

友情链接: NN.rar