Android 坐标系与视图坐标系图解

1.Android坐标系

在Android中,将屏幕的最左上角顶点作为Android坐标系的原点
这里写图片描述
从原点向右是X轴的正方向,从原点向下是Y轴的正方向

View提供了getLocationOnScreen( int[] location)方法来获取在整个屏幕内的绝对坐标,该坐标值为View左上角的坐标。注意该View的坐标值是从屏幕左上角开始获取的,所以也包括了通知栏的高度
该方法的具体实现

    /**
     * <p>Computes the coordinates of this view on the screen. The argument
     * must be an array of two integers. After the method returns, the array
     * contains the x and y location in that order.</p>
     *
     * @param location an array of two integers in which to hold the coordinates
     */
    public void getLocationOnScreen(@Size(2) int[] location) {
        getLocationInWindow(location);

        final AttachInfo info = mAttachInfo;
        if (info != null) {
            location[0] += info.mWindowLeft;
            location[1] += info.mWindowTop;
        }
    }

可看到,传入的int[]数组中,location[0]代表的是X轴坐标,location[1]代表的Y轴坐标
这里还有个getLocationInWindow方法,作用是获取View在当前窗口内的绝对坐标
我们在通过MotionEvent类中的getRawX(),getRawY()方法获取的坐标同样也属于这种Android坐标系里的坐标

2.视图坐标系

Android中的视图坐标系,描述的是子视图与其父视图中的位置关系
和Android坐标系一样,视图坐标系也是以原点向右为X轴正方向,以原点向下为Y轴正方向,与Android坐标系不同的是,视图坐标系的原点是以父视图左上角的位置为原点
这里写图片描述
如上图中,对于Button来说,父视图LinearLayout左上角就是视图坐标系的原点(0,0)
我们通过MotionEvent类中的getX()、getY()方法所获得的就是视图坐标系的坐标

在Android中,系统提供了很多获取坐标值、相对距离等方法
这里写图片描述
View提供的API

  • getTop():获取View顶边到其父布局顶边的距离
  • getLeft():获取View左边到其父布局左边的距离
  • getRight():获取View右边到其父布局左边的距离
  • getBottom():获取View底边到其父布局顶边的距离

MotionEvent提供的API
这里写图片描述

  • getX():获取点击位置离View左边的距离
  • getY():获取点击位置离View顶边的距离
  • getRawX():获取点击位置离屏幕左边的距离
  • getRawY():获取点击位置离屏幕顶边的距离
### 关于机械臂逆运动学的图解资料 机械臂逆运动学的研究主要集中在如何通过已知的末端执行器位置和姿态来反推出各关节的角度。针对这一问题,可以通过几何法实现直观的图解分析[^3]。 #### 几何法的应用 几何法是一种常见的逆运动学解析方法,尤其适用于具有特定结构特征的机械臂(如球形腕)。这种方法的核心在于将复杂的逆运动学问题分解为更简单的子问题。例如,在 PUMA560 型号的机械臂中,由于其第 4、5 和 6 轴交汇于一点,因此可以将其逆运动学问题分为两部分:一是确定手腕中心点的位置,二是计算手腕的姿态。 以下是基于几何法的一个典型图解过程: 1. **定义目标位姿** 给定机械臂末端执行器的目标位置 \( (x, y, z) \) 及方向矩阵 \( R \),首先需要找到手腕中心点的位置 \( W_c(x_w, y_w, z_w) \)。 2. **绘制几何关系** 使用三维坐标系绘图工具展示机械臂基座到末端执行器之间的几何关系。具体来说,可以通过连接各个关节轴线并标注长度参数的方式,构建出一个可视化的链路模型[^4]。 3. **应用三角函数** 利用高中阶段学习过的三角函数知识解决角度计算问题。例如,当涉及到平面内的两点距离或者夹角时,可以直接套用余弦定律或正切公式完成定量分析。 4. **验证结果准确性** 将所求得的所有关节变量重新输入至正向运动学方程式中检验最终输出是否匹配初始设定条件[^2]。 ```python import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt def plot_arm(joint_angles): fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Define link lengths and other parameters here... L1, L2, L3 = ... , ..., ... # Calculate forward kinematics based on joint angles T0_1 = calculate_transformation_matrix(L1, joint_angles[0]) T1_2 = calculate_transformation_matrix(L2, joint_angles[1]) T2_EE = calculate_transformation_matrix(L3, joint_angles[2]) EE_position = np.dot(T0_1, np.dot(T1_2, T2_EE))[:3,-1] # Plot each segment of the arm base = [0, 0, 0] shoulder = apply_transform(base, T0_1)[:3,-1] elbow = apply_transform(shoulder, T1_2)[:3,-1] end_effector = EE_position points = np.array([base, shoulder, elbow, end_effector]).T ax.plot(points[0], points[1], points[2], marker='o') ax.set_xlim(-L_total,L_total); ax.set_ylim(-L_total,L_total); ax.set_zlim(0,2*L_total) plt.show() # Example usage with hypothetical values for demonstration purposes only. joint_values = [...,...,...] plot_arm(joint_values) ``` 上述代码片段展示了如何借助 Matplotlib 库创建三维视图以便更好地理解机械臂的空间布局及其变化规律。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值