//var n=1;
//initial settings
var color=["green","blue","red"];
var colorIndex=0;
var colorNum="green";
var probIndex=0;
var PI2=Math.PI*2.0;
var R2D=360/PI2;
var D2R=PI2/360;
var min1=1;
var max1=5;
var min2=12;
var max2=50;
var GONews;
var listNum=[];
function setHTML(id,text){
var e=document.getElementById(id);
if (e==null) return;
e.innerHTML=text;
}
class Movable {
static DOWN=1;
static UP=2;
static mouse=2;
static x1=0;
static y1=0;
static ctx;
static list=new Array();
static list1=new Array();
static list2=new Array();
static selected=null;
constructor(x,y){
this.x0=Math.floor(0.5+x);
this.y0=Math.floor(0.5+y);
}
inside(x,y){
return true;
}
draw (ctx1){
;
}
move (e){
var dx=e.offsetX-Movable.x1;
var dy=e.offsetY-Movable.y1;
this.x0+=dx;
this.y0+=dy;
Movable.x1=e.offsetX;
Movable.y1=e.offsetY;
this.draw(Movable.ctx);
}
static mouseUp() {
Movable.mouse=Movable.UP;
}
static mouseDown(e) {
Movable.mouse=Movable.DOWN;
Movable.x1=e.offsetX;
Movable.y1=e.offsetY;
}
static isMouseDown() {
if (Movable.mouse==Movable.DOWN)
return true;
return false;
}
static isInside (e){
for (var i=0;i
360)
ang-=360;
if (ang1<=ang && ang<=ang2)
return true;
if (ang2<=360)
return false;
ang+=360;
if (ang1<=ang && ang<=ang2)
return true;
return false;
}
function CheckAnsow (n){
var i, max=0, mB=-1, bar, newx0, newy0;
for (i=0;iPI2)
bar.ang-=PI2;
bar.ang=Math.floor(bar.ang*R2D+0.5);
if (bar.ang>max) {
max=bar.ang;
mB=i;
}
}
listBar[listBar.length-1].ang=listBar[mB].ang+1;
listBar=listBar.sort(function (a, b) { return a.ang - b.ang; });
// sorted in assending order
listBar[listBar.length-1].ang=listBar[0].ang+359;
i=listNum.length;
var j, num, sum, ang1, ang2;
for (i=0;i0) {
for (i=1;i=0 && x<=this.w && y>=0 &&y<=this.h)
return true;
return false;
}
draw (ctx){
ctx.fillStyle="blue";
ctx.fillRect(this.x0, this.y0, this.w, this.h);
;
}
}
*/
class MyBar extends Movable {
constructor (xx,y,r,id){
super (xx,y);
this.ang=0.0;
this.r=r;
//this.h=h;
this.id=id;
this.visible=true;
this.moved=false;
}
setlocation (x,y){
this.x0=x;
this.y0=y;
}
inside(x,y){
x-=this.x0;
y-=this.y0;
var r=this.r;
if((x*x+y*y)<(r*r))
return true;
return false;
}
move (e){
super.move(e);
this.moved=true;
}
draw (ctx){
if (this.visible===false)
return;
ctx.strokeStyle="brown";
ctx.beginPath();
var newx0=this.x0-300;
var newy0=this.y0-200;
var angleP=Math.atan2(newy0,newx0);
var d=Math.sqrt(newx0*newx0+newy0*newy0);
var newx=300+(d+this.r)*Math.cos(angleP);
var newy=200+(d+this.r)*Math.sin(angleP);
var newx1=300+(d-this.r)*Math.cos(angleP);
var newy1=200+(d-this.r)*Math.sin(angleP);
ctx.moveTo(newx1,newy1);
ctx.lineTo(newx,newy);
ctx.fillStyle="black";
ctx.font="20px Arial";
ctx.textAlign = "center";
if (angleP<0)angleP+=Math.PI*2;
angleP=angleP*180/Math.PI;
angleP=360-angleP;
angleP=angleP-90;
if (angleP<0)angleP=angleP+360;
ctx.stroke();
}
}
class MyNumber extends Movable {
constructor (xx,y,r,id, ang){
super (xx,y);
this.r=r;
//this.h=h;
this.id=id;
if (ang>360)
ang-=360;
this.ang=ang;
this.ang=Math.floor(this.ang*R2D+0.5);
}
setlocation (x,y){
this.x0=x;
this.y0=y;
}
inside(x,y){
x-=this.x0;
y-=this.y0;
var r=this.r;
if((x*x+y*y)<(r*r))
return true;
return false;
}
/*move (e){
super.move(e);
var newx0=this.x0-300;
var newy0=this.y0-200;
var angleP=Math.atan2(newy0,newx0);
this.x0=300+75*Math.cos(angleP);
this.y0=200+75*Math.sin(angleP);
}*/
draw (ctx){
ctx.strokeStyle="brown";
ctx.beginPath();
// ctx.fillStyle="blue";
ctx.font="20px Arial";
ctx.textAlign = "center";
ctx.fillText(""+this.id,this.x0,this.y0);
}
}
/*class MyContainer {
//constructor (x,y,r,type, color){
constructor (x,y,w, h,color){
this.x0=x;
this.y0=y;
this.w=w;
this.h=h;
this.color=color;
}
inside(x,y){
x-=this.x0;
y-=this.y0;
var r=this.r;
if((x*x+y*y)<(r*r))
return true;
return false;
}
/*draw (ctx){
ctx.strokeStyle=this.color;
ctx.beginPath();
ctx.arc(this.x0, this.y0, this.r,0,2*Math.PI);
ctx.stroke();
}
draw (ctx){
ctx.strokeStyle=this.color;
ctx.beginPath();
ctx.rect(this.x0, this.y0,this.w,this.h);
ctx.stroke();
}
isOK(n){
if (this.inside(n.x0,n.y0)==false)
return 0;
var re=0;
switch (this.type) {
case 1:
if (n.id%2==1)
re= 1;
break;
case 2:
if (n.id%2==0)
re= 1;
break;
case 3:
if (n.id%3==0)
re= 1;
break;
}
}
}*/
function drawNumbers(ctx, x0,y0,radius) {
var ang;
var num;
ctx.font = radius*0.15 + "px arial";
ctx.textBaseline="middle";
ctx.textAlign="center";
ctx.fillStyle="black";
for(num = 1; num < 10; num++){
ang = num * Math.PI / 4.5;
ctx.rotate(ang);
ctx.translate(0, -radius*0.85);
ctx.rotate(-ang);
Movable.list1.push(360-ang*180/Math.PI);
ctx.fillStyle="black";
ctx.font="20px Arial";
ctx.textAlign = "center";
var angleP=(360-ang*180/Math.PI);
//ctx.fillText(""+(angleP).toFixed(0),x0,y0+7);
ctx.fillStyle="green";
ctx.fillText(num.toString(), x0, y0);
/*
ctx.lineWidth = 2;
ctx.beginPath();
ctx.moveTo(x0, y0);
ctx.lineTo(x0+10, y0);
ctx.stroke()
*/
ctx.rotate(ang);
ctx.translate(0, radius*0.85);
ctx.rotate(-ang);
}
}
function doMouseDown(event) {
//alert("mouse is down");
//var m=document.getElementById("mouseInfo");
//m.innerHTML="mouse is down";
Movable.mouseDown(event);
Movable.isInside(event);
}
function doMouseUp(event) {
//alert("mouse is up");
//var m=document.getElementById("mouseInfo");
//m.innerHTML="mouse is up";
Movable.mouseUp();
//Movable.positionOK();
CheckAnsow(n);
}
function doMouseMove(event) {
//alert("mouse is up");
//var m=document.getElementById("mouseInfo");
//m.innerHTML="mouse is moving: ("+event.offsetX+", "+event.offsetY+")";
if (Movable.isMouseDown() && Movable.moveSelected(event)) {
redraw(Movable.ctx);
}
}
function doMouseWheel(event) {
//alert("mouse is up");
//var m=document.getElementById("mouseInfo");
//m.innerHTML="mouse is wheeling: ("+event.offsetX+", "+event.offsetY+")";
}
function initCanvas(canvasName) {
var canvas = document.getElementById(canvasName);
canvas.addEventListener('mousedown',doMouseDown,false);
canvas.addEventListener('mouseup',doMouseUp,false);
canvas.addEventListener('mousemove',doMouseMove,false);
canvas.addEventListener('mousewheel',doMouseWheel,false);
//document.addEventListener('keydown',doKeyDown);
//document.addEventListener('keyup', doKeyUp);
return canvas;
}
function redraw(ctx) {
var n=getRndInteger(min1,max1);
ctx.fillStyle="white";
ctx.fillRect(0,0,canvas.width,canvas.height);
//ctx.arc(0,0,50,0,2*Math.PI);
Movable.redraw();
var str="";
if (lang==0){
if (probIndex==1){
str="The number 1 through 9 are arranged in a circle. ";
}else {
str="Nine numbers are arranged in a circle. ";
}
str+="
Please move the three brown lines to divide the numbers";
str+="
into three group with the same sums.";
}else{
if (probIndex==1){
str="数字 1 到 9 排列成一个圆圈. ";
}else {
str="九个数字排成一圈. ";
}
str+="
请移动三个棕色线来划分数字";
str+="
分成三组,总和相同.";
}
setHTML("c1",str);
/*
//Container1.draw(ctx);
//Container2.draw(ctx);
//Container3.draw(ctx);
if (GONews==1){
Movable.ctx.fillText ("Good job!!! Try next quesiton?",500,50);
}
drawNumbers(ctx, 300,200,radius);
*/
}
function getRndInteger(min, max, n=1) {
if (n==1)
return Math.floor(Math.random() * (max - min + 1) ) + min;
var num=[], nn, cnt;
for (var i=0;i100)
break;
}
num[i]=nn;
}
return num;
}
function fillNumbers(list, x0,y0,radius) {
var num;
var da=Math.PI*2/list.length;
var ang=Math.PI*1.5+da;
for(var n = 0; n< list.length; n++){
num = new MyNumber(x0+radius*Math.cos(ang),y0+radius*Math.sin(ang),radius, list[n], ang);
listNum[n]=num; //.push(360-ang*180/Math.PI);
ang += da;
}
}
function para432() {
var x1=getRndInteger(1,6);
var x4=getRndInteger(x1+1,10);
if (x4%2 !=0)
x4++;
var x7=1+3*(x4>>1);
var x9=3*(x4-x1);
var lst=[];
lst[0]=[x1, x1+1, x1+2, x9];
lst[1]=[x4, x4+1, x4+2];
lst[2]=[x7,x7+1];
var itp;
for (i=0;i>1);
var x9=3*(x4-x1);
var p=pat[sum];
var ii=getRndInteger(0,p.length-1,3);
var i1=ii[0];
var i2=ii[1];
var i3=ii[2];
var lst=[];
lst[0]=p[i1];
lst[1]=p[i2];
lst[2]=p[i3];
var itp;
for (i=0;i=color.length)
colorIndex=0;
//============================
listBar=new Array();
var j, k=1;
for (i=1;i<4;i++)
Movable.add(new MyBar((i)*50,50,25,k++));
Movable.add(new MyBar((i)*50,50,25,k++));
listBar[3].visible=false;
var list=[];
if (probIndex==0) {
for (i=0;i<9;i++)
list[i]=i+1;
} else {
k=getRndInteger(1,2);
switch(k) {
case 1:
list=para432();
// list=para333();
break;
case 2:
list=para333();
break;
}
}
fillNumbers(list, 300,200, 100);
probIndex++;
//====
redraw(ctx);
}
//======= initializing ========
var radius=100;
var canvas=initCanvas("myCanvas");
var ctx = canvas.getContext("2d");
var paraStr=window.location.search;
Movable.ctx=ctx;
var min1 = 1;
var max1 = 1;
var min2 = 12;
var max2 = 24;
var n=0;
var nPosition;
var randomNum = 0;
function getURLpara() {
var para=window.location.search;
var i;
if ( (i=para.indexOf("&p="))<0 &&
(i=para.indexOf("?p="))<0)
return [];
var tok=para.substring(i+3).split(/[=,]+/);
return tok;
}
var ss=getURLpara(); //=paraStr.substring(3).split(/[=,]+/);
if (ss.length==4) {
//N=parseInt(ss[0]);
min1=parseInt(ss[0]);
max1=parseInt(ss[1]);
min2=parseInt(ss[2]);
max2=parseInt(ss[3]);
}
getRandomPara();
showOrHide('foot',lang);
showOrHide('title',lang);
) processed by MyLexV4 -->