Как разделить отрезки по линейному уравнению? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть четыре сегмента на плоскости, определяемые координатами:

A <- matrix(c(0, 4, 4, 0, 0,            # x    
              0, 0, 3, 3, 0), ncol=2)   # y

x <- A[,1]
y <- A[,2]
n <- dim(x)

xx <- c()
yy <- c()

Длина сегмента велика 1.Мне нужно разделить все сегменты с шагом равным 1.

Моя попытка ниже. Я вычислил длину i-го сегмента, dist, и теперь работаю столько горизонтальный сегмент.Я должен добавить новые значения x -координат, затем повторить dist-1 раз y -координат.

for (i in 1:n-1){
dist <- sqrt((x[i] - x[i+1])^2 + (y[i] - y[i+1])^2)
if (!is.null(dist) & length(dist) > 0 & dist[1] > 1)
    {   
        # horizontal segment, 'y' is const
        if (y[i] - y[i+1] == 0)
        {    
            # split a horizontal segment on (dist-1) parts with step 1

            tmp <- c(seq(from = min(x[i], x[i+1]),
                            to   = max(x[i], x[i+1])))

            # remove 1st and last elements
            xx <- c(xx, tmp[2 : (length(tmp)-1)]) 
            yy <- c(yy, rep(y[i], dist-1));
         } # if
    } #if
#} # i
xx;yy;

Вывод:

> x
[1] 1 2 3 1 2 3
> y
[1] 0 0 0 3 3 3

C <- matrix(c(x,y), ncol=2)

plot(A, col='red', type= 'l', xlim=c(min(A[,1]),max(A[,1])),
      ylim=c(min(A[,2]),max(A[,2])), xlab='x', ylab='y'); 
points(A, col='black', pch = 22); 

points(C, col='red', pch = 21); 
grid()

seq

Вопрос. Как разбить отрезки по уравнению прямой из 2 точек?

https://algs4.cs.princeton.edu/91primitives/

1 Ответ

1 голос
/ 08 мая 2019

Извините, но мое понимание того, что вы явно хотите, не идеально. Но, может быть, это найти все уравнения или проследить все отрезки между 2 точками из приведенного выше примера? Если я использую функцию segments в R для отслеживания 10 * 10 сегментов, это то, что вы хотите?

all_points <- unique(rbind(A, C))

indices <- expand.grid(1:10, 1:10)
plot(all_points, xlim = c(0, 4), ylim = c(0, 3), xlab = "X", ylab = "Y")
for(i in 1:10){
  segments(x0 = all_points[indices[i, 1], 1],
           y0 = all_points[indices[i, 1], 2],
           x1 = all_points[indices[i, 2], 1],
           y1 = all_points[indices[i, 2], 2]
           )
}

enter image description here

...