Camera frustum calculate Visible Point Of line

I check if any of the planes of the frustum intersects with any of the lines I have in the scene:

    var line, tmpArr = [];
    function initDatas() {
        var geometry = new THREE.Geometry();
        geometry.vertices.push(
            new THREE.Vector3(0, 0, 0),
            new THREE.Vector3(0, 0, 50)
        );

        var material = new THREE.LineBasicMaterial({
            color: 0xffff00
        });
        line = new THREE.Line(geometry, material);
        line.frustumCulled = false;
        scene.add(line);
    }


       function onOrbitControlsEnd() {
        var frustum = new THREE.Frustum();
        frustum.setFromMatrix(new THREE.Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse));

        var vStart, vEnd;
        var line3 = new THREE.Line3(), interP = new THREE.Vector3();
        var resultArr = [];
        for (var i = 0, len = line.geometry.vertices.length; i < len - 1; i++) {
            vStart = line.geometry.vertices[i];
            vEnd = line.geometry.vertices[i + 1];

            line3.set(vStart, vEnd);
            
            for (var j = 0; j < 6 ; j++) {
                var plane = frustum.planes[j];
                var intersect = plane.intersectLine(line3, interP);
                if (intersect && frustum.containsPoint(intersect)) {
                    resultArr.push({ intersect: intersect.clone() });
                }
            }
        }
        if (tmpArr.length > 0) {
            var len = tmpArr.length;
            while (len--) {
                scene.remove(tmpArr[len]);
            }
            tmpArr = [];
        }
        if (resultArr.length > 0) {
            for (var k = 0, kl = resultArr.length; k < kl; k++) {
                var mesh = new THREE.Mesh(new THREE.BoxBufferGeometry(1, 1, 1), new THREE.MeshBasicMaterial({ color: 0xff0000 }));
                mesh.position.copy(resultArr[k].intersect);
                mesh.frustumCulled = false;
                scene.add(mesh);
                tmpArr.push(mesh);
            }
        }
    }

I need to find the intersection of the cone and line segment in the visible range, as shown in the figure below, but the result is always beyond my expectation. I don’t know where the problem is. Please help me. Thank you very much.

When I call frustum. containsPoint method to determine whether the calculated intersection is within the field of vision, it seems that there is a problem in judging when the camera rotates to a certain angle. The specific debugging parameters are as follows:

This is the JSON data at the intersection point:
{x: 0, y: 0, z: 10.247075764313756}

This is frustum’s JSON data:
“{“planes”:[{“normal”:{“x”:-0.5636868038602206,“y”:-0.32766368167746085,“z”:0.7582174482715501},“constant”:1.7662915181826233},{“normal”:{“x”:-0.42846535657501705,“y”:-0.32766368167746085,“z”:-0.8420534127504116},“constant”:8.62858511805243},{“normal”:{“x”:-0.8246469760410625,“y”:0.5613392859326407,“z”:-0.06968192717601998},“constant”:3.3739057814523896},{“normal”:{“x”:0.18759615784538242,“y”:-0.9821183253373745,“z”:0.015851706474737833},“constant”:3.3005388553982007},{“normal”:{“x”:0.8323470057975492,“y”:0.5497743092841535,“z”:0.07033257275961624},“constant”:9991.279417771093},{“normal”:{“x”:-0.8323470057986695,“y”:-0.5497743092824827,“z”:-0.07033257275941693},“constant”:8.620582173626742}]}”