R - TRUE / FALSE调用函数与逐步评估

时间:2018-02-16 02:16:10

标签: r if-statement boolean

在R。

工作

目标是根据前4个值定义的线段是否与最终4个值定义的线段相交,将R一组8个数值交给TRUE或FALSE。

输入的形式为第一个线段的(x1,x2,y1,y2) 和第二个线段相同。这是存储系统的特性。线段的实际点是(x1,y1)和(x2,y2)

所以,例如:
do_line_segments_intersect(0,2,0,2,0,2,2,0)

应该返回TRUE,因为从(0,0)到(2,2)的线段与从(0,2)到(2,0)的线段相交

do_line_segments_intersect(-1,0,0,-1,0,1,0,1)

应该返回FALSE,因为从(-1,0)到(0,-1)的线段不与从(0,0)到(1,1)的线段相交

这是我正在使用的代码。
find_line_equation <- function(x1,x2,y1,y2)
  {
    A <- y1 - y2
    B <- x2 - x1
    C = A*x1 + B*y1
    return_list = list(A,B,C)
    return(return_list)
}
find_the_intersection_point <- function(list_1, list_2)
{
  coefficient_matrix = matrix(c(list_1[1], list_1[2], list_2[1],list_2[2]), nrow = 2, ncol = 2, byrow = TRUE)
  coefficient_matrix <- as.numeric(coefficient_matrix)
  coefficient_matrix = matrix(coefficient_matrix, nrow =2, ncol = 2, byrow = FALSE)
  RHS_matrix = matrix(c(list_1[3], list_2[3]), nrow = 2, ncol = 1, byrow = FALSE)
  RHS_matrix <- as.numeric(RHS_matrix)
  RHS_matrix = matrix(RHS_matrix, nrow =2, ncol = 1, byrow = FALSE)
  inverse_coefficient_matrix = solve(coefficient_matrix) 
    solution = inverse_coefficient_matrix %*% RHS_matrix
  return(solution)
}
do_line_segments_intersect <- function(ax1,ax2,ay1,ay2,bx1,bx2,by1,by2)
{
  a_coefficients <- find_line_equation(ax1,ax2,ay1,ay2)
  b_coefficients <- find_line_equation(bx1,bx2,by1,by2)
  intersection_point <- find_the_intersection_point(a_coefficients, b_coefficients)
  #find the boundaries of the line segments. This will let us check that our intersection is within the boundaries.
  max_x <- max(ax1,ax2)
  min_x <- min(ax1,ax2)
  max_y <- max(ay1,ay2)
  min_y <- min(ay1,ay2)
  #Is the intersection within the boundaries?
  if(findInterval(intersection_point[1],c(min_x,max_x)) && findInterval(intersection_point[2],c(min_y,max_y)))
    {
      print("true1")
    } else {
      print("false1")
    }
}

我知道代码不完整。我与max和min值的比较应该包括所有的点(因此,坐标值),而不仅仅是它们的一半。最后我想返回实际的布尔值,而不仅仅是一个指示值是什么的文本字符串。

我遇到的问题如下:

如果我在a_coefficients的输入坐标(-1,0,0,-1)和b_coefficients的(0,1,0,1)上逐步运行代码,然后逐行运行每一行然后最终的结果是&#34; false&#34;我期待的。

但是,如果我用这样的输入调用函数
do_line_segments_intersect(-1,0,0,-1,0,1,0,1)

然后R返回&#34; true&#34;。

为什么要这样做?

而且,更重要的是,我该如何修复它?

1 个答案:

答案 0 :(得分:0)

原来我没有与正确的值进行比较,这就是为什么我的代码表现得很奇怪。 谢谢Phil,求助