Мне нужно построить стволы скважин на карте горизонта и в вертикальном разрезе.
У меня нет проблем с картами, но вертикальные сечения могут иметь разные углы направления, поэтому мне приходится проецировать на них профиль ствола скважины, а для ста точек это занимает несколько минут.
Я использую три переменные для каждой точки траектории ствола скважины: восточное направление, северное направление и вертикальная глубина.
Для карты все очень просто: восточное положение X и северинг Y:
var act_plan = [];
некоторый цикл
for(...)
{
act_plan.push({x: upperX, y: upperY, name: "Inc=" + Inc + ", Azi=" + AzimAccepted + " @ " + MD});
}
...
if(act_plan.length > 0)
{
planChart.addSeries(
{
id: "act_plan",
color: "black",
name: "bla-bla-bla",
data: act_plan,
dashStyle: "Solid",
lineWidth: 2,
type: 'spline',
crisp: false
},
false, false
);
}
...
planChart.redraw(true);
Но для вертикального разреза, видимо, я делаю что-то не так
var act_profileX = [];
некоторый цикл
for(...)
{
act_profileX.push({x: calcShiftAway(upperX, upperY, 0), y: upperTVD, name: "Inc=" + Inc + ", Azi=" + AzimAccepted + " @ " + MD});
}
где
function calcShiftAway(east, nord, VSrad) // X,Y coordinates and a directional angle in radians of a vertical section
{
return (-nord*Math.cos(VSrad) + east*Math.sin(VSrad)); // rotate coordinates
}
...
if(act_profileX.length > 0)
{
var oPl = sectionChartWest.addSeries(
{
id: "act_plan", // the same id as for the plan
color: "black",
name: "bla-bla-bla",
data: act_profileX, //
dashStyle: "Solid",
lineWidth: 2,
type: 'spline',
crisp: false
},
false, false
);
oPl = rotateProfile("act_plan"); // I used var OPl to be sure that the series have been formed before the next manipulations with them (paranoia)
}
где
function rotateProfile(data_id)
{
var oProfile = sectionChartWest.get(data_id);
var oPlan = planChart.get(data_id);
if(typeof(oProfile) === "undefined")
{
alert("There is no such a profile " + oProfile + " - it's a program Error");
return false;
}
if(typeof(oPlan) === "undefined")
{
alert("There is no such a plan " + oPlan + " - it's a program Error");
return false;
}
if(oProfile.data.length != oPlan.data.length || oProfile.data.length
Подробнее здесь: https://stackoverflow.com/questions/798 ... azy-slowly