Превращение последовательностей в участки в R - PullRequest
0 голосов
/ 20 февраля 2019

Скажем, у меня есть некоторая последовательность, состоящая из 2 чисел:

seq <- c(0, 1, 1, 1, 0, 0)

Предположим, я бы хотел построить это на графике следующим образом:

Мой график (x, y) начинается с (0, 0) и имеет одну прямую линию с (1, 0).Затем последовательность вступает в действие: если число равно 0, я поворачиваю налево с 1 координатой, если число равно 1, я поворачиваю направо с 1 координатой.Итак, для примера последовательности я начинаю с:

(0, 0) -> (1, 0) -> (1, 1) -> (1, 2) -> (1, 1) -> (1, 0) etc.

Лучше нарисовать это, если вы хотите понять, что я имею в виду, поворачивая влево и вправо.

Как бы я получил эти точки в сюжет?Любые советы?

Пример графика последовательности: enter image description here

1 Ответ

0 голосов
/ 20 февраля 2019
x = c(0, 1, 1, 1, 0, 0)
m = cbind(x = c(0, 1),
          y = c(0, 0))
flag_xy = 1  #Track whether to add to x- or y- coordinate
for (i in x){
    flag_direction = diff(tail(m, 2))  #Track which way the line is facing
    if (i == 0){
        if (flag_xy == 1){
            m = rbind(m, tail(m, 1) + c(0, flag_direction[,1] * 1))
        } else{
            m = rbind(m, tail(m, 1) + c(flag_direction[,2] * -1, 0))
        }
        flag_xy = flag_xy * -1
    } else{
        if (flag_xy  == 1){
            m = rbind(m, tail(m, 1) + c(0, flag_direction[,1] * -1))
        } else{
            m = rbind(m, tail(m, 1) + c(flag_direction[,2]* 1, 0))
        }
        flag_xy = flag_xy * -1
    }
}
graphics.off()
plot(m, asp = 1)
lines(m)

enter image description here

m
#     x  y
#     0  0
#     1  0
#[2,] 1  1
#[2,] 2  1
#[2,] 2  0
#[2,] 1  0
#[2,] 1 -1
#[2,] 2 -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...