====== Einthoven-háromszög ======
ipt language="javascript">
//definitions
//automatic computing
var styles=[null, "thick", "semi", "vec", "proj", "cand", "res"];
pre=document.getElementById("pre");
function line(xa, ya, xb, yb, style) {
var line=document.createElementNS(xmlns, "line");
line.setAttribute("x1", xa);
line.setAttribute("y1", ya);
line.setAttribute("x2", xb);
line.setAttribute("y2", yb);
if(!(style>0)) {style=0};
line.setAttribute("class", styles[style]);
return line;
}
function normx(li) {
return -1*(li.getAttribute("y2")-li.getAttribute("y1"));
}
function normy(li) {
return (li.getAttribute("x2")-li.getAttribute("x1"));
}
function normval(li) {
return li.getAttribute("x1")*normx(li)+li.getAttribute("y1")*normy(li);
}
function isect(linea, lineb) {
n=normx(linea);
k=normy(linea);
j=normx(lineb);
i=normy(lineb);
q=normval(linea);
z=normval(lineb);
y=((n==0)?(q/k):(j==0)?(z/i):((q-z*n/j)/(k-i*n/j)));
x=((k==0)?(q/n):(i==0)?(z/j):((q-z*k/i)/(n-k*j/i)));
return [x, y];
}
function add(obj) {
svg.appendChild(obj);
}
function snip(linea, lineb, linec, style) {
var a=isect(linea, lineb);
var b=isect(linea, linec);
return line(a[0], a[1], b[0], b[1], style);
}
function grid(linea, lineb, linec, d, n) {
var t=isect(lineb, linec);
var tval=t[0]*normx(linea)+t[1]*normy(linea);
if(normval(linea)==tval) return;
len=Math.sqrt(Math.pow(normx(linea),2)+Math.pow(normy(linea),2));
dx=d*normx(linea)/len;
dy=d*normy(linea)/len;
dir=(dx*normx(linea)+dy*normy(linea));
dir/=Math.abs(dir);
tdir=tval-normval(linea);
tdir/=Math.abs(tdir);
dir*=tdir;
x1=linea.getAttribute("x1");
x2=linea.getAttribute("x2");
y1=linea.getAttribute("y1");
y2=linea.getAttribute("y2");
x1=1*x1+dx*dir;
x2=1*x2+dx*dir;
y1=1*y1+dy*dir;
y2=1*y2+dy*dir;
count=0;
while((tval*dir)>(normval(line(x1, y1, x2, y2))*dir)) {
count++;
add(snip(line(x1, y1, x2, y2), lineb, linec, (count%n==0)?2:0));
x1=1*x1+dx*dir;
x2=1*x2+dx*dir;
y1=1*y1+dy*dir;
y2=1*y2+dy*dir;
}
}
function text(x, y, text) {
t=document.createElementNS(xmlns, "text");
t.setAttribute("x", x);
t.setAttribute("y", y);
t.setAttribute("text-anchor", "middle");
t.setAttribute("dominant-baseline", "central");
t.setAttribute("font-size", "5");
t.appendChild(document.createTextNode(text));
return t;
}
function draw() {
var w=1*pre.l.value+20;
var h=1*pre.l.value+20;
var l=1*pre.l.value/(Math.sqrt(3));
var d=1*pre.d.value;
var n=1*pre.n.value;
var va=1*pre.veca.value;
var vb=1*pre.vecb.value;
var vc=1*pre.vecc.value;
var xo=w/2;
var yo=h/2-l/4;
var xa=xo-l*Math.cos(Math.PI/6);
var ya=yo-l*Math.sin(Math.PI/6);
var xb=xo+l*Math.cos(Math.PI/6);
var yb=yo-l*Math.sin(Math.PI/6);
var xc=xo;
var yc=yo+l;
xmlns = 'http://www.w3.org/2000/svg';
container = document.getElementById('svgContainer');
if(container.firstChild) container.removeChild(container.firstChild);
svg = document.createElementNS(xmlns, 'svg');
svg.setAttribute('xmlns', xmlns);
svg.setAttribute('xmlns:xlink', "http://www.w3.org/1999/xlink");
svg.setAttribute('version', '1.2');
svg.setAttribute("width", w+"mm");
svg.setAttribute("height", h+"mm");
svg.setAttribute("viewBox", "0 0 "+w+" "+h);
container.appendChild(svg);
style=document.createElementNS(xmlns, "style");
style.setAttribute("type", "text/css");
style.appendChild(document.createTextNode("line.thick {\nstroke:black;\nstroke-width: .2;\n}\nline.semi {\nstroke-width: .1;\n}\nline {\nstroke:"+pre.col.value+" ;\nstroke-width: .05;\nstroke-linecap: round;\n}\nline.vec {\nstroke-width: .5;\nstroke: red;\nmarker-end: url(#vecm);\n}\nline.proj {\nstroke-width: .1;\nstroke: blue;\n}\nline.cand {\nstroke-width: .1;\nstroke: black;\nmarker-end: url(#candm);\n}\nline.res {\nstroke-width: .5;\nstroke: red;\nmarker-end: url(#resm);\n}\npath.vec {\nstroke-width: 1;\nstroke: red;\nfill: none;\nstroke-linecap: round;\n}\npath.cand {\nstroke-width: 1;\nstroke: black;\nfill: none;\nstroke-linecap: round;\n}\npath.res {\nstroke-width: 1;\nstroke: red;\nfill: none;\nstroke-linecap: round;\n}"));
defs=document.createElementNS(xmlns, "defs");
defs.appendChild(style);
marker=document.createElementNS(xmlns, "marker");
//marker.setAttribute("viewBox", "-2 -2 1 2");
marker.setAttribute("id", "vecm");
marker.setAttribute("orient", "auto");
marker.setAttribute("overflow", "visible");
mp=document.createElementNS(xmlns, "path");
mp.setAttribute("d", "M-1.73 -1L0 0 -1.73 1M-1.73 -1Z");
mp.setAttribute("class", "vec");
marker.appendChild(mp);
mar2=marker.cloneNode(true);
mar2.setAttribute("id", "candm");
mar2.firstChild.setAttribute("class", "cand");
mar2.firstChild.setAttribute("d", "M-5.19 -3L0 0 -5.19 3M5.19 -3Z");
mar3=marker.cloneNode(true);
mar3.setAttribute("id", "resm");
mar3.firstChild.setAttribute("class", "res");
defs.appendChild(marker);
defs.appendChild(mar2);
defs.appendChild(mar3);
add(defs);
linea=line(xa, ya, xb, yb, 1);
lineb=line(xa, ya, xc, yc, 1);
linec=line(xc, yc, xb, yb, 1);
if(pre.drawgrid.checked) {
add(linex=line((xa+xb)/2, (ya+yb)/2, xc, yc, 2));
add(liney=line((xa+xc)/2, (ya+yc)/2, xb, yb, 2));
add(linez=line((xc+xb)/2, (yc+yb)/2, xa, ya, 2));
grid(linex, lineb, linea, d, n);
grid(linex, linea, linec, d, n);
grid(liney, lineb, linea, d, n);
grid(liney, lineb, linec, d, n);
grid(linez, linec, linea, d, n);
grid(linez, linec, lineb, d, n);
}
add(linea);
add(lineb);
add(linec);
pre.letoltogomb.disabled=false;
add(text(xo, yo-(l+10)*.5, "I"));
add(text(xo-Math.cos(Math.PI/6)*(l+10)*.5, yo+Math.sin(Math.PI/6)*(l+10)*.5, "II"));
add(text(xo+Math.cos(Math.PI/6)*(l+10)*.5, yo+Math.sin(Math.PI/6)*(l+10)*.5, "III"));
if(pre.drawvect.checked) {
add(pab=snip(line((xa+xb)/2-va/2, (ya+yb)/2, (xa+xb)/2-va/2, (ya+yb)/2+1, 4), linea, (va>0)?lineb:linec, 4));
add(pae=snip(line((xa+xb)/2+va/2, (ya+yb)/2, (xa+xb)/2+va/2, (ya+yb)/2+1, 4), linea, (va>0)?linec:lineb, 4));
add(pbb=snip(line((xa+xc)/2-vb/2*Math.sin(Math.PI/6), (ya+yc)/2-vb/2*Math.cos(Math.PI/6), (xa+xc)/2-vb/2*Math.sin(Math.PI/6)+Math.cos(Math.PI/6), (ya+yc)/2-vb/2*Math.cos(Math.PI/6)-Math.sin(Math.PI/6), 4), (vb>0)?linea:linec, lineb, 4));
add(pbe=snip(line((xa+xc)/2+vb/2*Math.sin(Math.PI/6), (ya+yc)/2+vb/2*Math.cos(Math.PI/6), (xa+xc)/2+vb/2*Math.sin(Math.PI/6)+Math.cos(Math.PI/6), (ya+yc)/2+vb/2*Math.cos(Math.PI/6)-Math.sin(Math.PI/6), 4), lineb, (vb>0)?linec:linea, 4));
add(pcb=snip(line((xb+xc)/2+vc/2*Math.sin(Math.PI/6), (yb+yc)/2-vc/2*Math.cos(Math.PI/6), (xb+xc)/2+vc/2*Math.sin(Math.PI/6)-Math.cos(Math.PI/6), (yb+yc)/2-vc/2*Math.cos(Math.PI/6)-Math.sin(Math.PI/6)), (vc>0)?linea:lineb, linec, 4));
add(pce=snip(line((xb+xc)/2-vc/2*Math.sin(Math.PI/6), (yb+yc)/2+vc/2*Math.cos(Math.PI/6), (xb+xc)/2-vc/2*Math.sin(Math.PI/6)-Math.cos(Math.PI/6), (yb+yc)/2+vc/2*Math.cos(Math.PI/6)-Math.sin(Math.PI/6)), (vc>0)?lineb:linea, linec, 4));
add(line((xa+xb)/2-va/2, (ya+yb)/2, (xa+xb)/2+va/2, (ya+yb)/2, 3));
add(line((xa+xc)/2-vb/2*Math.sin(Math.PI/6), (ya+yc)/2-vb/2*Math.cos(Math.PI/6), (xa+xc)/2+vb/2*Math.sin(Math.PI/6), (ya+yc)/2+vb/2*Math.cos(Math.PI/6), 3));
add(line((xb+xc)/2+vc/2*Math.sin(Math.PI/6), (yb+yc)/2-vc/2*Math.cos(Math.PI/6), (xb+xc)/2-vc/2*Math.sin(Math.PI/6), (yb+yc)/2+vc/2*Math.cos(Math.PI/6), 3));
cab=isect(pab, pbb);
cae=isect(pae, pbe);
add(line(cab[0], cab[1], cae[0], cae[1], 5));
cbb=isect(pab, pcb);
cbe=isect(pae, pce);
add(line(cbb[0], cbb[1], cbe[0], cbe[1], 5));
ccb=isect(pcb, pbb);
cce=isect(pce, pbe);
add(line(ccb[0], ccb[1], cce[0], cce[1], 5));
add(line(resxa=(cab[0]+cbb[0]+ccb[0])/3, resya=(cab[1]+cbb[1]+ccb[1])/3, resxb=(cae[0]+cbe[0]+cce[0])/3, resyb=(cae[1]+cbe[1]+cce[1])/3, 6));
axis=Math.atan((resyb-resya)/(resxb-resxa));
axis=(resxb>=resxa)?axis:((resyb>resya)?Math.PI+axis:axis-Math.PI);
pre.axis.value=Math.round(axis/Math.PI*180);
}
}
function toggle() {
pre.n.disabled=pre.col.disabled=pre.d.disabled=!pre.drawgrid.checked;
pre.vecc.disabled=pre.vecb.disabled=pre.veca.disabled=!pre.drawvect.checked;
}
function download() {
if(window.confirm("Engedélyezd a felugró ablakot!\nA felugró ablakban megjelenő diagramot CTRL+S-sel tudod elmenteni, CTRL+P-vel ki tudod nyomtatni.\nA mentéskor ügyelj rá, hogy a kiterjesztés svg legyen! (pl. tengely.svg)")) {
window.open("data:image/svg+xml;base64,"+btoa(container.innerHTML));}
}
function point(x, y) {
p=document.createElementNS(xmlns, "circle");
p.setAttribute("cx", x);
p.setAttribute("cy", y);
p.setAttribute("r", "1");
p.setAttribute("fill", "black");
add(p);
}
toggle();
draw();
“People who know how to creatively break the rules also know why the rules were there in the first place.” -- Richard Rohr
ef="javascript:window.alert('Ez az oldal megkerüli A DokuWiki platform megalkotóinak erőfeszítéseit az ellen, hogy egy felhasználó tetszőleges JavaScript kódot futtathasson az oldalon. Az itt használt technikával károkat lehetne okozni a SotePediát böngésző felhasználók számítógépein, de enélkül nem lehetne ezt az interaktív Einthoven-háromszöget itt elhelyezni. Ez az oldal káros kódot nem tartalmaz.\n\nEz a program az itt megtalálható formájában van közzétéve, minden garancia és felelősségvállalás nélkül. A készítésekor törekedtem arra, hogy a létrehozott ábrák és kiszámolt eredmények pontosak legyenek, ennek ellenére előfordulhat hibás működés. Nem vállalok felelősséget a program használatából eredő károkért (mint pl. biofizika/élettan jegyzőkönyv el nem fogadása, a számítógép lefagyása 80m-es milliméterpapír rajzolásakor, globális termonukleáris háború).\n\nEz a program CC BY-NC-SA 3.0 licensz alatt került megosztásra.\n\nGalambos Máté, 2013\nmatega@mensa.hu'); void(0);"> (A programról)
Ez a Mű a Creative Commons Nevezd meg! - Ne add el! - Így add tovább! 3.0 Unported Licenc feltételeinek megfelelően szabadon felhasználható.
And [[wiki:user:thermate18|He]] smiled [[wiki:user:thermate18|His]] work to see