Просто используйте Raycaster. Я не знаю, почему вы не хотите его использовать, это самый простой способ найти перекресток без физического движка и без кучи математики.
Просто используйте Raycaster.set()
чтобы указать прямо вниз от координат XZ и увидеть, где он пересекает местность:
var ray = new THREE.Raycaster();
var rayPos = new THREE.Vector3();
// Use y = 100 to ensure ray starts above terran
rayPos.set(x, 100, z);
var rayDir = new THREE.Vector3(0, -1, 0); // Ray points down
// Set ray from pos, pointing down
ray.set(rayPos, rayDir);
// Check where it intersects terrain Mesh
let intersect = ray.intersectObject(terrainMesh);
console.log(intersect);
См. здесь intersect
объект . Он включает point
в месте пересечения.