Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 朱莉娅集查看器_Javascript_Math_Set_Complex Numbers_Viewer - Fatal编程技术网

Javascript 朱莉娅集查看器

Javascript 朱莉娅集查看器,javascript,math,set,complex-numbers,viewer,Javascript,Math,Set,Complex Numbers,Viewer,我一直在尝试在我的网站上制作一个julia集查看器,但目前我在让程序显示正确的julia集时遇到了问题。例如,当使用C值0+0i进行测试时,我得到以下图像: 结果应该是一个圆。我不知道为什么会这样。我编写了自己的复数库和绘图函数,它们发布在下面。任何帮助都将不胜感激 函数complexNum(实、虚){ this.real=real; 这个。想象的=想象的; 归还这个; } 函数addComplex(c1,c2){ this.real=c1.real+c2.real; this.virgina

我一直在尝试在我的网站上制作一个julia集查看器,但目前我在让程序显示正确的julia集时遇到了问题。例如,当使用C值0+0i进行测试时,我得到以下图像: 结果应该是一个圆。我不知道为什么会这样。我编写了自己的复数库和绘图函数,它们发布在下面。任何帮助都将不胜感激

函数complexNum(实、虚){
this.real=real;
这个。想象的=想象的;
归还这个;
}
函数addComplex(c1,c2){
this.real=c1.real+c2.real;
this.virginal=c1.virginal+c2.virginal;
归还这个;
}
多功能复合体(c1,c2){
this.real=(c1.real*c2.real)-(c1.virtual*c2.virtual);
this.virtual=(c1.real*c2.virtual)+(c2.real*c1.virtual);
归还这个;
}
函数复杂度(c){
var符号=“”;
如果(c.c>=0){
符号='+';
}
返回c.实+符号+c.虚+i;
}
函数getComplexModulus(c){
返回Math.sqrt((c.real*c.real)+(c.virginal*c.virginal));
}
//全球的
var MAXITERATION=100;
var边界=4;
var CANVASID=“juliaDraw”;
var CONTEXT=document.getElementById(“juliaDraw”).getContext(“2d”);
var高度=750;
var宽度=750;
var juliamaimagedata=CONTEXT.createImageData(宽度、高度);
函数readInput(inputID){
return document.getElementById(inputID).value;
}
函数drawPointOnCanvas(x、y、颜色){
//console.log(“+x+”、“+y”处的绘图像素);
CONTEXT.fillStyle=颜色;
fillRect(x,y,1,1);
}
函数createArray(长度){
var arr=新数组(长度| | 0),
i=长度;
如果(arguments.length>1){
var args=Array.prototype.slice.call(参数,1);
而(i--)arr[length-1-i]=createArray.apply(this,args);
}
返回arr;
}
函数doesPointscape(c,complexNum){
var迭代次数=0;
var=false;
而((!转义)&(迭代次数<最大迭代次数)){
if(getComplexModulus(complexNum)>边界){
逃逸=真;
}
complexNum=addComplex(multComplex(complexNum,complexNum),c);
迭代++;
}
如果(转义){
返回true;
}否则{
返回false;
}
}
功能绘图集(画布ID、宽度、高度、c、起点、步长){
var complexNumberArray=createArray(宽度+1,高度+1);
var doesPointEscapeArray=createArray(宽度+1,高度+1);
var real=start.real;
var Imaginate=起始值。Imaginate;
console.log('==绘图集===');
log('c='+dispComplex(c));

对于(var x=0;x而言,问题源于对Javascript中使用
这个
指针的混淆

将DoesPointscape()中的Julia计算更改为

它是有效的

这将从multComplex返回一个新的复数,然后将其添加到c,并从addComplex返回一个分配给complexNum的新复数

您的multComplex和addComplex函数使用
this
指针,但要使
this
指针指向您的一个复数,您必须在现有的复数上调用该函数,或者调用
new
来创建一个新的复数

或者,您可以将multComplex()和addComplex()函数重写为

function multComplex(c1, c2) {
    var real = (c1.real * c2.real) - (c1.imaginary * c2.imaginary);
    var imaginary = (c1.real * c2.imaginary) + (c2.real * c1.imaginary);
    return new ComplexNum(real, imaginary);
}

function addComplex(c1, c2) {
    var real = c1.real + c2.real;
    var imaginary = c1.imaginary + c2.imaginary;
    return new ComplexNum(real, imaginary);
}

那么你的DoesPointscape()函数应该按原样工作。

我还没有看过你所有的代码,但我想知道这是否是你的数学库中的问题,因为你自己使用了,而不是使用像math.js这样更为成熟的东西。谢谢你的帮助!你知道我的代码以前试图计算什么吗,因为它仍然很有趣?我不知道它叫什么。一个家长的在片场?:)如果你把它发布在www.fractalforums.com上,也许那里的人可以识别它。
function multComplex(c1, c2) {
    var real = (c1.real * c2.real) - (c1.imaginary * c2.imaginary);
    var imaginary = (c1.real * c2.imaginary) + (c2.real * c1.imaginary);
    return new ComplexNum(real, imaginary);
}

function addComplex(c1, c2) {
    var real = c1.real + c2.real;
    var imaginary = c1.imaginary + c2.imaginary;
    return new ComplexNum(real, imaginary);
}