Я пытаюсь ввести некоторые известные значения ACR из другой программы и воспроизводить их в three.jsКак нарисовать 2d дугу
Прямо сейчас я использую следующий код, который я нашел на этом сайте. Он отлично рисует дугу, хотя это может быть не самый лучший вариант.
function DRAWarc(){
// smooth my curve over this many points
var numPoints = 100;
spline = new THREE.SplineCurve3([
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(0, 200, 0),
new THREE.Vector3(150, 150, 0)
]);
var material = new THREE.LineBasicMaterial({
color: 0xff00f0,
});
var geometry = new THREE.Geometry();
var splinePoints = spline.getPoints(numPoints);
for(var i = 0; i < splinePoints.length; i++){
geometry.vertices.push(splinePoints[i]);
}
var line = new THREE.Line(geometry, material);
scene.add(line);
}
Ниже перечислены известные переменные.
Центральная точка (X, Y) (если Аре был полный круг, центр окружности)
радиус (если он был круг)
начальный угол (я не уверен, но я думаю, это степень, если бы это был круг, идущий против часовой стрелки, причем 0 находился справа от круга)
Конечный угол (см. выше)
еще код!
///////////
// SCENE //
///////////
scene = new THREE.Scene();
////////////
// CAMERA //
////////////
var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
viewsize = 900;
camera = new THREE.OrthographicCamera(
SCREEN_WIDTH/- 2, SCREEN_WIDTH/2,
SCREEN_HEIGHT/2, SCREEN_HEIGHT/- 2,
1, 1e6);
camera.position.z = 2000;
scene.add(camera);
camera.lookAt(new THREE.Vector3(2100, 3600, 0));
//////////////
// RENDERER //
//////////////
// create and start the renderer
if (Detector.webgl){
renderer = new THREE.WebGLRenderer();
//alert('no problem.');
}else{
renderer = new THREE.CanvasRenderer();
alert('problem.');
}
renderer.setClearColor("white", 1);
renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
container = document.body;
container.appendChild(renderer.domElement);
////////////
// EVENTS //
////////////
// automatically resize renderer
THREEx.WindowResize(renderer, camera);
// toggle full-screen on given key press
THREEx.FullScreen.bindKey({ charCode : 'm'.charCodeAt(0) });
///////////
// STATS //
///////////
// displays current and past frames per second attained by scene
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.bottom = '0px';
stats.domElement.style.zIndex = 100;
container.appendChild(stats.domElement);
///////////
// LIGHT //
///////////
// create a light
var light = new THREE.PointLight(0xffffff);
light.position.set(0,250,0);
scene.add(light);
var ambientLight = new THREE.AmbientLight(0x111111);
// scene.add(ambientLight);
//////////////
// GEOMETRY //
//////////////
// most objects displayed are a "mesh":
// a collection of points ("geometry") and
// a set of surface parameters ("material")
doWork();
}
function animate()
{
requestAnimationFrame(animate);
render();
update();
}
function update()
{
// delta = change in time since last call (in seconds)
var delta = clock.getDelta();
// functionality provided by THREEx.KeyboardState.js
if (keyboard.pressed("1"))
document.getElementById('message').innerHTML = ' Have a nice day! - 1';
if (keyboard.pressed("2"))
document.getElementById('message').innerHTML = ' Have a nice day! - 2 ';
//controls.update();
stats.update();
}
function render()
{
renderer.render(scene, camera);
}`
Можем ли мы увидеть остальную часть вашего кода, пожалуйста? Возможно, как jsFiddle? – jameslafferty
чувак у меня есть 28000 строк кода: P что вы хотите увидеть? Подумав об этом, это в основном математический вопрос ... Мне нужен алгоритм для преобразования моих данных в три точки, тогда приведенный выше код будет соответствовать моим потребностям. Кстати, этот код в порядке, просто хотел показать, что я пытался – contehhh
строк 28k, вероятно, слишком много. Я просто ищу пример, который полностью иллюстрирует то, что вы пытаетесь сделать. Например, я не знаю, откуда происходит «сцена», или имеет значение глобальное значение '' 'spline'''. Исходя из того, что у вас здесь, сложно ответить на вопрос. – jameslafferty