====== Einthoven-háromszög ======
bmit="return false" target="">
Oldalhossz:nchange="draw();"/>mm
Rács rajzolásanclick="toggle(); draw();">
Rácsköz:nchange="draw();"/>mm
Minden n-edik vonal vastag, n=nchange="draw();"/>
Rács színe:nchange="draw();"/>
Vektorok rajzolásanclick="toggle(); draw();"/>
I:nchange="draw();"/>mV
II:nchange="draw();"/>mV
III:nchange="draw();"/>mV
Tengelyállás:°
nClick="download();" id="letoltogomb" value="Letöltés és nyomtatás" disabled="true"/>
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) Creative Commons Licenc
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