Проблемы с переводом rgl в R

Я построил серию точек, используя пакет rgl в R. Я нанес их в двух измерениях для простоты, но проблема все еще существует в трех измерениях. Фрагмент кода и график ниже показывают базовую линию точек, построенных в плоскости xy:

library(rgl)
seq <- seq(1, 10, by = 0.1)
df <- data.frame(x = seq, y = seq / 10)

clear3d("all")
bg3d(color = "white")
points3d(x = df$x, y = df$y, z = 0)
axes3d()
rgl.viewpoint(theta = 0, phi = 0)

Первый сюжет

Точки строятся, как и ожидалось. Однако, если я возьму эти же точки и переведу их на значительную величину, графическое устройство, похоже, не сможет обрабатывать точки:

library(rgl)
seq <- seq(1, 10, by = 0.1)
df <- data.frame(x = seq, y = seq / 10)

# Translate points
df <- df + 1000000

clear3d("all")
bg3d(color = "white")
points3d(x = df$x, y = df$y, z = 0)
axes3d()
rgl.viewpoint(theta = 0, phi = 0)

Второй сюжет

Это известное ограничение? Проблема в OpenGL или в пакете? Я работаю с некоторыми точками и поверхностями, которые имеют связанную систему координат, поэтому я бы предпочел не переводить свои данные обратно в исходную точку.


person hfisch    schedule 25.02.2015    source источник
comment
Мне кажется, что вы ограничены точностью с плавающей запятой. OpenGL по умолчанию работает только с числами с одинарной точностью (что идеально подходит для графики). С современными GL и графическими процессорами (GL 4.x) вы действительно можете использовать двойную точность для данных вершин и преобразования, но я не знаю, поддержит ли это rgl.   -  person derhass    schedule 26.02.2015


Ответы (1)


У @derhass была правильная идея. Из руководства rgl:

Обратите внимание, что многие из этих вычислений выполняются на видеокарте с одинарной точностью; вы, вероятно, увидите признаки ошибки округления, если ваша сцена требует точности более 4 или 5 цифр для различения значений в любой координате.

person hfisch    schedule 06.04.2015