Доброго времени суток.
Собственно стоит задача построить цилинроид, код рендера и просчета точек писать самому. Дано неявное уравнение поверхности с параметром.
Делал так : сперва выделил куб в пространстве (т.е. задал промежуток изменения X,Y,Z), затем задал шаг разбиения h, согласно которому куб разбивается на точки. Затем подставляю координаты каждой точки через шаг в уравнение и проверяю равны ли правая и левая часть уравнения (брал модуль разности частей и сравнивал с погрешностью).
В чем вопрос к Вам : я хотел бы узнать в правильную ли сторону я двигаюсь, и нету ли странностей при тестах? Например, при увеличение размеров куба, кол-во точек увеличивается или очень мало, или вообще не увеличивается.
http://cs625116.vk.me/v625116292/b81a/P_F-nojQjeI.jpg(картинка по размерам не влезла)
//fGet - получает число из textbox
var points3D = []; //массив точек на поверхности
var checkEps = fGet("iT_Eps"); //погрешность при сравнении разности частей уравнения
var parA = fGet("iT_PA");
var defX = [fGet("iT_XS"),fGet("iT_XE")]; //размеры куба
var defY = [fGet("iT_YS"),fGet("iT_YE")];
var defZ = [fGet("iT_ZS"),fGet("iT_ZE")];
var divStep = fGet("iT_DS"); //шаг h
//Округление до 6 знаков после запятой.
function rP(x) {
var m = Math.pow(10,6);
return Math.round(x*m)/m;
}
//Проверяет произвольную точку R^3 на принадлежность поверхности
function isInSurface(x,y,z){
var leftPart = Math.pow(x*x+y*y+z*z,3);
var rightPart = Math.pow(parA,3)*z*(x*x-y*y);
var sub = Math.abs(leftPart-rightPart);
return (sub<=checkEps);
}
//Заполняет массив точек,принадлежащих поверхности
function gen3DArray(){
var SI = 0; //индекс в points3D
var surfP = 0; //кол-во точек на поверхности
var nSurfP = 0; //общее кол-во поступивших точек
for(var iX = defX[0]; iX <= defX[1]; iX=rP(iX+divStep)){
for(var iY = defY[0]; iY <= defY[1]; iY=rP(iY+divStep)){
for(var iZ = defZ[0]; iZ <= defZ[1]; iZ=rP(iZ+divStep)){
if(isInSurface(rP(iX),rP(iY),rP(iZ))){
points3D[SI]=[rP(iX),rP(iY),rP(iZ)];
SI++;
surfP++;
}
nSurfP++;
}
}
}
}