在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;。
答案 0 :(得分:0)
原来我没有与正确的值进行比较,这就是为什么我的代码表现得很奇怪。 谢谢Phil,求助