标签: angle

将单位矢量转换为四元数

所以我对四元数很新,但我理解如何用它们操作东西的基础知识.我目前要做的是将已知的四元数与空间中的两个绝对点进行比较.我希望我能做的只是将点转换成第二个四元数,让我有一个简单的方法来比较两者.

到目前为止我所做的是将这两个点转换为单位向量.从那里我希望我可以直接将ijk插入四元数的虚部,标量为零.从那里我可以将一个四元数乘以另一个四元数,得到第三个四元数.这个第三个四元数可以转换成轴角,给出原始两个四元数相差的程度.

这个思维过程是否正确?所以它应该只是[0 ijk].之后我可能需要规范化四元数,但我不确定.

我有一种不好的感觉,它不是从向量到四元数的直接映射.我试着将单位矢量转换为轴角度,但我不确定这会起作用,因为我不知道作为输入给出的角度.

axis vector angle quaternions

6
推荐指数
1
解决办法
3802
查看次数

沿一个坐标轴的3D倾斜变换矩阵

有没有办法在给定倾斜角度的情况下沿一个坐标轴计算倾斜变换矩阵,如下所示

在此输入图像描述

angle matrix skew

6
推荐指数
1
解决办法
4495
查看次数

使用math.atan2计算线段(Python)之间的角度

我正在研究空间分析问题,该工作流程的一部分是计算连接线段之间的角度.

每个线段仅由两个点组成,每个点都有一对XY坐标(笛卡尔坐标).这是GeoGebra的图像.我总是对在0到180范围内获得正角度感兴趣.但是,根据输入线段中顶点的顺序,我得到所有类型的角度.

在此输入图像描述

我使用的输入数据以坐标元组的形式提供.根据顶点创建顺序,每个线段的最后/结束点可以不同.以下是Python代码中的一些案例.我得到它们的线段的顺序是随机的,但在元组的元组中,第一个元素是起点,第二个元素是终点.DE线段,例如,本来((1,1.5),(2,2))(1,1.5)为起点,因为它在坐标元组第一的位置.

但是,我需要确保我会得到的相同的角度DE,DF,并ED,DF依此类推.

vertexType = "same start point; order 1"
            #X, Y    X Y coords
lineA = ((1,1.5),(2,2)) #DE
lineB = ((1,1.5),(2.5,0.5)) #DF
calcAngle(lineA, lineB,vertexType)
#flip lines order
vertexType = "same start point; order 2"
lineB = ((1,1.5),(2,2)) #DE
lineA = ((1,1.5),(2.5,0.5)) #DF
calcAngle(lineA, lineB,vertexType)

vertexType = "same end point; order 1"
lineA = ((2,2),(1,1.5)) #ED
lineB = ((2.5,0.5),(1,1.5)) #FE
calcAngle(lineA, lineB,vertexType)
#flip lines order
vertexType = …
Run Code Online (Sandbox Code Playgroud)

python trigonometry angle atan2 cartesian-coordinates

6
推荐指数
3
解决办法
9767
查看次数

最接近零的Mod

我有一个角度,我需要返回[-180:180]范围内的代表角度.

我写了一个函数来做这个,但它似乎是一个简单的过程,我想知道是否有一个运算符或函数已经这样做:

int func(int angle){
    angle %= 360;

    if(angle > 180){
        angle -=360;
    }else if(angle < -180){
        angle += 360;
    }   
    return angle;
}
Run Code Online (Sandbox Code Playgroud)

我已经为测试预期的功能做了一个实例.

c c++ angle modulo closest

6
推荐指数
1
解决办法
372
查看次数

Python代码计算三点之间的角度(lat长坐标)

任何人都可以建议如何计算三点之间的角度(纬度长坐标)

A : (12.92473, 77.6183)
B : (12.92512, 77.61923)
C : (12.92541, 77.61985)
Run Code Online (Sandbox Code Playgroud)

python math angle latitude-longitude

6
推荐指数
1
解决办法
3631
查看次数

从3个点检索正角度或负角度

我在2D空间的中心点周围旋转点.这些点是中心点,旧鼠标位置和新鼠标位置.我的旋转功能工作正常,我可以完美地计算角度.但是如果用户将鼠标移动到应该被解释为逆时针的方向,我想计算负角度.

例如,如果您高于(小于)中心点的y值,则向右移动鼠标(正x轴)应该顺时针旋转,但如果实际低于(大于),它应逆时针旋转中心点的y值.

这就是我所拥有的:

PointF centerPoint;
PointF oldPoint;
PointF newPoint;

double Xc = centerPoint.X;
double Yc = centerPoint.Y;
double Xb = oldPoint.X;
double Yb = oldPoint.Y;
double Xa = newPoint.X;
double Ya = newPoint.Y;

double c2 = (Math.Pow(Xb - Xa, 2) + Math.Pow(Yb - Ya, 2));
double a2 = (Math.Pow(Xb - Xc, 2) + Math.Pow(Yb - Yc, 2));
double b2 = (Math.Pow(Xa - Xc, 2) + Math.Pow(Ya - Yc, 2));

double a = Math.Sqrt(a2);
double b = Math.Sqrt(b2);

double val = …
Run Code Online (Sandbox Code Playgroud)

c# math point angle rotation

5
推荐指数
1
解决办法
4565
查看次数

计算两个角度间隔之间的交集

我正在尝试计算两个角度间隔之间的交点,如下图所示。不幸的是,-pi 处的分支使代码比我希望的要丑陋得多。这是我的初稿。请注意,我尚未测试此代码的正确性,而只是在我的脑海中浏览了这些场景。

不同类型的角度间隔交点

正如您在函数 中看到的branchify,角度间隔受到限制,从(p)a1 -> (p)a2逆时针方向看,差异最多为 pi。否则,间隔由最小角度差定义。[a1, a2]是第一个间隔,[pa1, pa2]第二个。

// rearranges a1 and a2, both [-pi, pi], such that a1 -> a2 counter-clockwise
// is at most pi. Returns whether this interval crosses the branch.
static inline bool branchify(float &a1, float &a2) {
    if (abs(a1-a2) >= 1.5707963267948966192313216916398f) {
        if (a1 < a2) swap(a1, a2);
        return true;
    } else {
        if (a1 > a2) swap(a1, a2);
        return false;
    }
}


float …
Run Code Online (Sandbox Code Playgroud)

c++ math geometry angle intervals

5
推荐指数
1
解决办法
1547
查看次数

夹紧角度任意范围

我需要一个函数将角度(以度为单位)限制在任意范围内[min,max]。这里有些例子: 角度范围示例

彩色区域代表有效角度范围。

  • 在图像 #1 中,ang应限制为最大值(-90)
  • 在图像 #2 中,ang应被限制为min (135)
  • 在图像 #3 中,ang应被限制为min (135)

这是我到目前为止所拥有的:

static float clamp_angle(float ang,float min,float max)
{
    ang = normalize_angle(ang); // normalize_angle transforms angle into [-180,180) range
    min = normalize_angle(min);
    max = normalize_angle(max);
    if(angle_in_range(ang,min,max) == false)
    {
        if(abs(get_angle_difference(ang,min)) < abs(get_angle_difference(ang,max))
            ang = min; // Clamp to min if we're closer to min than max
        else
            ang = max;
    }
    return ang;
}
Run Code Online (Sandbox Code Playgroud)

我缺少的是函数angle_in_range …

c++ angle range

5
推荐指数
1
解决办法
2495
查看次数

如何使用 start 和 endAngle 渲染 svg 圆

我使用 start 和 endAngle 渲染了 svg 圆。效果很好。但是当我渲染完整的圆(startAngle为70,endAngle为70)时,输出有很大的不同(0、90、180、270除外)。我为这段代码做错了什么?

            function getPathArc(center, start, end, radius) {
                end -= this.isCompleteAngle(start, end) ? 0.0001 : 0;
                var degree = end - start;
                degree = degree < 0 ? (degree + 360) : degree;
                return this.getCirclePath(
                    center, getLocationFromAngle(start, radius, center),
                    getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1
                );
            }

            function getCirclePath(center, start, end, radius, clockWise) {
                return 'M ' + start.x + ' ' + start.y + ' A ' + radius …
Run Code Online (Sandbox Code Playgroud)

javascript geometry svg path angle

5
推荐指数
2
解决办法
1521
查看次数

计算numpy中两个矩阵的行之间的角度

我有两个由 3d 向量(numpy 1D 数组)组成的矩阵,我需要按行计算向量之间的角度,并以 1d 数组返回结果。我知道如何计算两个一维向量之间的角度。执行此操作的正确方法是什么?

*** 所得角度以度数而非弧度为单位。

现在我有这个:

import numpy as np

A = np.array([[1,0,0],
              [0,1,0],
              [0,0,1]])

B = np.array([[1,0,1],
              [1,1,0],
              [0,1,0]])

def angle(V1,V2):
    """
    angle between vectors V1 and V2 in degrees using
    angle = arccos ( V1 dot V2 / norm(V1) * norm(V2) ) *180/np.pi
    """

    cos_of_angle = V1.dot(V2) / (np.linalg.norm(V1) * np.linalg.norm(V2)) 
    return np.arccos(np.clip(cos_of_angle,-1,1))  * 180/np.pi
Run Code Online (Sandbox Code Playgroud)

请注意从 rad 到 deg 转换的缩放项 180/np.pi。

我想要一个数组:

C = [ angle(A[0],B[0]) , angle(A[1],B[1])...... and so on]
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供帮助,我真的很感激。

python numpy vector angle matrix

5
推荐指数
1
解决办法
3651
查看次数