0

У меня есть ряд координат (представляющих электроды на ЭЭГ-колпачке) на сфере. У меня есть положение как в декартовых, так и в сферических координатах.Как повернуть координаты на сфере на 90 градусов?

chan   X   Y  Z long lat sph_radius 
1 Fp1 8.08e+01 2.61e+01 -4.00 17.9 -2.70   85 
2 Fp2 8.08e+01 -2.61e+01 -4.00 -17.9 -2.70   85 
3 F3 5.76e+01 4.82e+01 39.90 39.9 28.00   85 
4 F4 5.76e+01 -4.81e+01 39.90 -39.9 28.00   85 
5 C3 3.87e-15 6.32e+01 56.90 90.0 42.00   85 
6 C4 3.87e-15 -6.32e+01 56.90 -90.0 42.00   85 
7 P3 -5.76e+01 4.82e+01 39.90 140.0 28.00   85 
8 P4 -5.76e+01 -4.81e+01 39.90 -140.0 28.00   85 
9 O1 -8.08e+01 2.61e+01 -4.00 162.0 -2.70   85 
10 O2 -8.08e+01 -2.61e+01 -4.00 -162.0 -2.70   85 
11 F7 4.99e+01 6.84e+01 -7.49 53.9 -5.06   85 
12 F8 4.99e+01 -6.84e+01 -7.49 -53.9 -5.05   85 
13 T3 5.18e-15 8.45e+01 -8.85 90.0 -5.97   85 
14 T4 5.18e-15 -8.45e+01 -8.85 -90.0 -5.97   85 
15 T5 -4.99e+01 6.84e+01 -7.49 126.0 -5.06   85 
16 T6 -4.99e+01 -6.84e+01 -7.49 -126.0 -5.05   85 
17 Fz 6.07e+01 0.00e+00 59.50 0.0 44.40   85 
18 Cz 5.20e-15 0.00e+00 85.00 0.0 90.00   85 
19 Pz -6.07e+01 -7.44e-15 59.50 -180.0 44.40   85 

Я хочу, чтобы повернуть все электроды на 90 градусов против часовой стрелки/вниз по оси, так что электрод Cz, который в настоящее время (длинный = 0, ш = 90), становится (длинный = 0, ш = 0). Меня не волнует, выполняется ли вращение на декартовых или сферических координатах, так как я могу легко преобразовать один в другой.

Я попытался найти решение этой проблемы на этом сайте, но все они были подавляющими. Если бы кто-нибудь мог предложить простую формулу R, чтобы получить эту ротацию, я бы очень признателен ей.

+1

Я думаю, что ваш поворот плохо определен , Изобразите землю и представьте точку на северном полюсе (с осью z, проходящей через северный и южный полюса). Если вы хотите повернуть эту точку на 90 градусов вниз, любая точка на экваторе является допустимым результатом. Если вы можете лучше определить свое вращение [раздел страницы википедии на 3D-вращении] (https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions), вы должны сформулировать правильную матрицу для умножения на. – Gregor

+1

@ dww Я думаю, что ваш ответ был полезен, но нет, я не думаю, что OP не думает о том, чтобы ось вращалась вокруг. Пример '(long = 0, late = 90) | -> (long = 0, lat = 0)' предполагает отображение, ортогональное оси z, но ортогональное * как * кажется плохо определенным. – Gregor

+0

, как отметил Григор, этот поворот меня немного смущает. Я предлагаю вам сначала определить систему отсчета, а остальное будет проще: в общем случае «мы» думаем о Земле, XY - это плоскость, в которой находится экватор, XZ - это плоскость, в которой находится гринвичский меридиан, ось X содержит точку с широтой и долготой, равной нулю. В этой системе отсчета вращение вокруг Z включает только долготу (движение вращения Земли), вращение вокруг Y включает только широту (наклон Земли), вращение вокруг X включает в себя оба значения. – marcoresk

ответ

1

используя ваши Шир/координаты (в data.table нотации)

# 1st we deal with cases where lat>0, 
# i.e. rotation does not entail passing through the south pole 
dt[, long.rot := long] # longitude stay in the same plane as we rotate 
dt[, lat.rot := lat-90] # latitude moves south 90 degrees 

# now we deal with case that were already in the southern hemisphere, 
# which will rotate through the south pole and northwards on the opposite longitude 
dt[lat < 0, long.rot := -sign(long)*(180-abs(long)) ] 
dt[lat < 0, lat.rot := 180+lat.rot ] 

Однако слово предупреждения: точки на или вблизи северного полюса может вести себя неожиданно. Строго говоря, долгота на полюсе не определена и должна быть дана как NA. В этом случае повернутая долгота будет равна NA, так как «повернутая» точка может находиться в любом неуказанном месте на экваторе.

Для точек, близких к полюсам, хотя долгота математически четко определена, малые неопределенности в местоположении будут увеличены в большую неопределенность в месте повернутых точек вокруг экватора

+0

Мне все еще нравится это и думаю, что это полезно, но я думаю, вы должны добавить несколько предупреждений. Это не является поводом для какого-либо обычного определения - оно не сохраняет расстояние между точками (маленький круг одинаково разнесенных точек вокруг северного полюса будет отображаться на гигантский круг, близкий к экватору), и все точки будут отображаться на южное полушарие. Это все еще может быть то, что хочет OP, но это не вращение. – Gregor

+0

Спасибо @ Gregor, я добавил эти предостережения в – dww