首页 > 解决方案 > 在 Python 中进行矢量操作时出现问题。(垂直于参考矢量的矢量分量)

问题描述

我有一组坐标,我想对其进行操作并获得所需的结果。我需要找到某个向量相对于参考向量的水平投影,即如果 v1(x1,y1,z1) 表示参考单位向量并且 v2(x2,y2,z2) 是某个随机向量,我想找到v2 的投影垂直于 v1 的方向。

所需的图形表示如下,

https://drive.google.com/file/d/1i3RQm--nLc1dIdZGMpt7oc5KLahOJySk/view?usp=sharing

向量表示是必需的

https://drive.google.com/file/d/12QLIoIJ0wckLa8sIgJ8ynMaD33PWrgxQ/view?usp=sharing

我写的代码如下,

catalog=ascii.read("catalog.txt",'r',format='fixed_width_no_header', fast_reader=False, delimiter="\s",names=x,col_starts=y,col_ends=z)
x=[]
y=[]
z=[]
for i in range(0,len(catalog['PSRJ'])):
    catalog['DECJD'][i] = catalog['DECJD'][i]+90
    x.append(sin(catalog['DECJD'][i])*cos(catalog['RAJD'][i]))
    y.append(sin(catalog['DECJD'][i])*sin(catalog['RAJD'][i]))
    z.append(cos(catalog['DECJD'][i]))

coord=[]    
for i in range(0,len(catalog['PSRJ'])):
    coord.append([x[i],y[i],z[i]])

def norm(k):
    p=[0.0,0.0,0.0]
    p[0]=k[0]/(k[0]**2+k[1]**2+k[2]**2)**0.5
    p[1]=k[1]/(k[0]**2+k[1]**2+k[2]**2)**0.5
    p[2]=k[2]/(k[0]**2+k[1]**2+k[2]**2)**0.5
    return([p[0],p[1],p[2]])

direc = norm(coord[]) #insert key for required coordinate

pix=[]

print(direc)

for i in range(0,len(catalog['PSRJ'])):
    if a-5<=catalog['RAJD'][i]<=a+5 and b-5<=catalog['DECJD'][i]<=b+5:
        pix.append(coord[i])
        if pix[-1]==f:
            p=len(pix)
            print('p',pix)
        val=pix
        count=count+1
                    
for i in range(0,count):
     for j in range(0,3):
          if not(i==p-1):
               k=np.dot(direc,pix[i])
               val[i][j]=direc[j]*k
               val[i][j]=pix[i][j]-val[i][j]
          else:
               val[i][j]=0.0
print(val)

coord 是包含位置向量的列表,例如:[[x1,y1,z1],[x2,y2,z2]...]

f 为参考坐标,例如:[a,b,c]

输出:

[0.049780917594520344, 0.9791671435583665, -0.19685925230782697]
p= 1 
 [[0.049780917594520344, 0.9791671435583665, -0.19685925230782697]]
[[0.0, 0.0, 0.0]] 
[-0.813400538291293, 0.4058994949023155, 0.41668353020665466]
p= 2 
 [[0.683288067396023, -0.16836586544306054, -0.7104719222515533], [-0.813400538291293, 0.4058994949023155, 0.41668353020665466]]
[[-0.0, -0.0, -0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] 
[0.15331177729205145, -0.40555298841701465, 0.9011227843804535]
p= 2 
 [[0.08556174481590322, 0.8925106169941267, -0.4428362974924498], [0.15331177729205145, -0.40555298841701465, 0.9011227843804535]]
[[-0.0, -0.0, -0.0], [0.0, 0.0, 0.0], [-0.0, -0.0, -0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] 
[0.4561283699625753, 0.08868628538946206, 0.8854838524214335]
p= 3 
 [[0.016015167632180395, 0.07982154161648915, -0.9966805084377242], [-0.39320614327231507, 0.918593873485819, -0.03967649792044076], [0.4561283699625753, 0.08868628538946206, 0.8854838524214335]]
[[-0.0, -0.0, -0.0], [-0.0, 0.0, -0.0], [0.0, 0.0, 0.0]] 

我得到的最终结果是空向量,我不知道是不是我的计算导致了这个问题,对这个问题的任何洞察都会有所帮助。

标签: pythonastropy

解决方案


推荐阅读