编写坐标象限判断函数遇报错:no method matching ››(::Float64, ::Int64) 求助
问题分析与解决方案
你遇到的错误核心是用错了运算符:>>是右位移运算符(仅适用于整数类型的位操作),而你需要的是比较数值大小的大于号>。你的坐标值是Float64类型,无法对浮点数执行位移操作,因此触发了类型不匹配的错误。
修正后的基础判断逻辑
把代码里的>>替换成>,就能正确判断坐标的正负:
# 判断第一象限的正确写法 point.x > 0 && point.y > 0
完整的象限判断函数
针对你提到的coordinate(xyz(…,…,…))类型,假设它包含x、y(平面象限)或x、y、z(3D卦限)字段,下面是完整的判断函数示例:
平面坐标系(4象限)
function determine_quadrant(point) # 先处理坐标轴上的点(不属于任何象限) if point.x == 0 || point.y == 0 return "该点位于坐标轴上,不属于任何象限" end # 判断象限 if point.x > 0 && point.y > 0 return "第一象限" elseif point.x < 0 && point.y > 0 return "第二象限" elseif point.x < 0 && point.y < 0 return "第三象限" else # point.x > 0 && point.y < 0 return "第四象限" end end
3D空间坐标系(8卦限)
如果需要判断3D空间的卦限,可加入z轴的判断:
function determine_octant(point) if point.x == 0 || point.y == 0 || point.z == 0 return "该点位于坐标平面/坐标轴上,不属于任何卦限" end if point.x > 0 && point.y > 0 && point.z > 0 return "第一卦限" elseif point.x < 0 && point.y > 0 && point.z > 0 return "第二卦限" elseif point.x < 0 && point.y < 0 && point.z > 0 return "第三卦限" elseif point.x > 0 && point.y < 0 && point.z > 0 return "第四卦限" elseif point.x > 0 && point.y > 0 && point.z < 0 return "第五卦限" elseif point.x < 0 && point.y > 0 && point.z < 0 return "第六卦限" elseif point.x < 0 && point.y < 0 && point.z < 0 return "第七卦限" else return "第八卦限" end end
额外提示
如果你的坐标值存在浮点精度问题(比如0.0000001这类接近0的数),建议用近似判断替代严格等于:
# 用近似判断替代point.x == 0 isapprox(point.x, 0; atol=1e-6)
内容的提问来源于stack exchange,提问作者Carolina Monteiro
相关产品推荐
相关产品推荐

