据说距离等于以下公式:
distance = sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
我在下面的函数中做这个精确的公式。然而,我遇到的问题是,当x2
小于x1
,例如,我得到一个错误,因为uint256不能是负的。
有人知道我在计算距离时如何用固体来解释这个吗?
function getDistance(uint256 x1, uint256 x2, uint256 y1, uint256 y1, ) private view returns(uint256) {
return sqrt(((x2 - x1)**2) + ((y2 - y1)**2));
}
function sqrt(uint x) private pure returns (uint y) {
uint z = (x + 1) / 2;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
不要使用uint256,而是使用int256,这样你就可以接受负数
您可以先使用最小/最大函数确定较大的值,然后应用公式。示例min/map和sqrt实现:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol#L16-L28