Gozintograph: Unterschied zwischen den Versionen
| Zeile 25: | Zeile 25: | ||
<html> | <html> | ||
<div id=" | <div id="gozinto_final" style="width:95vw; max-width:1000px; height:70vw; max-height:600px; margin-top:20px;"></div> | ||
<script src="https://jsxgraph.org/distrib/jsxgraphcore.js"></script> | <script src="https://jsxgraph.org/distrib/jsxgraphcore.js"></script> | ||
<script> | <script> | ||
var brd = JXG.JSXGraph.initBoard(' | var brd = JXG.JSXGraph.initBoard('gozinto_final', { | ||
boundingbox: [-1, 9, 13, -1], | boundingbox: [-1, 9, 13, -1], | ||
axis: false, | axis: false, | ||
| Zeile 58: | Zeile 58: | ||
var B5=box(8,2,9.5,3,'B5'); | var B5=box(8,2,9.5,3,'B5'); | ||
// | // Funktion: Kante mit Kreis (Menge) und Pfeilspitze am Ziel | ||
function edge(from,to,label){ | function edge(from,to,label,offset){ | ||
// | // leicht versetzen (offset) für parallele Kanten | ||
var | var dx=to[0]-from[0]; | ||
var | var dy=to[1]-from[1]; | ||
var | var len=Math.sqrt(dx*dx+dy*dy); | ||
var | var ux=dx/len, uy=dy/len; | ||
var | var px=-uy, py=ux; // senkrechter Einheitsvektor | ||
var | // leicht seitlich verschieben | ||
var f=[from[0]+px*offset, from[1]+py*offset]; | |||
var t=[to[0]+px*offset, to[1]+py*offset]; | |||
var midX=(f[0]+t[0])/2; | |||
var midY=(f[1]+t[1])/2; | |||
var gap=0.3; | var gap=0.3; | ||
var p1=[midX-ux*gap, midY-uy*gap]; | var p1=[midX-ux*gap, midY-uy*gap]; | ||
var p2=[midX+ux*gap, midY+uy*gap]; | var p2=[midX+ux*gap, midY+uy*gap]; | ||
// | // Linie bis zum Kreis (keine Spitze) | ||
brd.create(' | brd.create('line',[f,p1],{straightFirst:false,straightLast:false,strokeColor:'#000',strokeWidth:1.5}); | ||
brd.create('arrow',[p2, | // Linie nach dem Kreis bis zum Ziel (mit Spitze) | ||
// Kreis | brd.create('arrow',[p2,t],{strokeColor:'#000',strokeWidth:1.5}); | ||
brd.create('circle',[ [midX,midY],0.2 ],{fillColor:'white',strokeColor:'black'}); | // Kreis mit Beschriftung | ||
brd.create('circle',[[midX,midY],0.2],{fillColor:'white',strokeColor:'black'}); | |||
brd.create('text',[midX,midY,label], | brd.create('text',[midX,midY,label], | ||
{anchorX:'middle',anchorY:'middle',fontSize:11}); | {anchorX:'middle',anchorY:'middle',fontSize:11}); | ||
} | } | ||
// Kanten | // --- Kanten gemäß Definition --- | ||
// B1: E1,E2 | // B1: E1,E2 | ||
edge([0.75,6],[0.75,3],'2'); // E1→B1 | edge([0.75,6],[0.75,3],'2',-0.15); // E1→B1 | ||
edge([2.75,6],[0.75,3],'1'); // E2→B1 | edge([2.75,6],[0.75,3],'1',0.15); // E2→B1 | ||
// B2: E1,E2 | // B2: E1,E2 | ||
edge([0.75,6],[2.75,3],'2'); // E1→B2 | edge([0.75,6],[2.75,3],'2',-0.15); // E1→B2 | ||
edge([2.75,6],[2.75,3],'1'); // E2→B2 | edge([2.75,6],[2.75,3],'1',0.15); // E2→B2 | ||
// B3: E1,E2,E3 | // B3: E1,E2,E3 | ||
edge([0.75,6],[4.75,3],'1'); // E1→B3 | edge([0.75,6],[4.75,3],'1',-0.25); // E1→B3 | ||
edge([2.75,6],[4.75,3],'1'); // E2→B3 | edge([2.75,6],[4.75,3],'1',0); // E2→B3 | ||
edge([4.75,6],[4.75,3],'1'); // E3→B3 | edge([4.75,6],[4.75,3],'1',0.25); // E3→B3 | ||
// B4: E1,E3,E4 | // B4: E1,E3,E4 | ||
edge([0.75,6],[6.75,3],'2'); // E1→B4 | edge([0.75,6],[6.75,3],'2',-0.25); // E1→B4 | ||
edge([4.75,6],[6.75,3],'1'); // E3→B4 | edge([4.75,6],[6.75,3],'1',0); // E3→B4 | ||
edge([6.75,6],[6.75,3],'1'); // E4→B4 | edge([6.75,6],[6.75,3],'1',0.25); // E4→B4 | ||
// B5: E1,E4 | // B5: E1,E4 | ||
edge([0.75,6],[8.75,3],'1'); // E1→B5 | edge([0.75,6],[8.75,3],'1',-0.15); // E1→B5 | ||
edge([6.75,6],[8.75,3],'2'); // E4→B5 | edge([6.75,6],[8.75,3],'2',0.15); // E4→B5 | ||
</script> | </script> | ||