Gozintograph: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 25: | Zeile 25: | ||
<html> | <html> | ||
<div id="gozinto_small" style="width:95vw; max-width:1000px; height:70vw; max-height:600px; margin-top:20px;"></div> | <div id="gozinto_small" 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> | ||
// JSXGraph erst starten, wenn MediaWiki das DOM fertig aufgebaut hat | |||
document.addEventListener("DOMContentLoaded", function () { | |||
// | |||
var brd = JXG.JSXGraph.initBoard('gozinto_small', { | |||
boundingbox: [-1, 10, 15, -1], | |||
axis: false, | |||
showNavigation: false | |||
}); | }); | ||
let | // ------------------------------------------------------------- | ||
// Rechteck als Polygon | |||
// ------------------------------------------------------------- | |||
function createRect(x,y,w,h,labelText) { | |||
let p1 = brd.create('point', [x, y], {visible:false}); | |||
let p2 = brd.create('point', [x+w, y], {visible:false}); | |||
let p3 = brd.create('point', [x+w, y-h], {visible:false}); | |||
let p4 = brd.create('point', [x, y-h], {visible:false}); | |||
let poly = brd.create('polygon', [p1,p2,p3,p4], { | |||
} | fillColor:'#3498db', | ||
fillOpacity:0.8, | |||
vertices:{visible:false}, | |||
borders:{strokeWidth:2, strokeColor:'#1f4e78'} | |||
}); | |||
brd.create('text', | |||
[ ()=>(p1.X()+p3.X())/2, | |||
/ | ()=>(p1.Y()+p3.Y())/2, | ||
labelText ], | |||
{anchorX:'middle', anchorY:'middle', strokeColor:'black', fontSize:14} | |||
); | |||
return {p1:p1,p3:p3, | |||
centerX:()=> (p1.X()+p3.X())/2, | |||
centerY:()=> (p1.Y()+p3.Y())/2}; | |||
} | |||
return p; | // ------------------------------------------------------------- | ||
} | // Kreis-Knoten | ||
// ------------------------------------------------------------- | |||
function createCircleNode(x,y,labelText){ | |||
let p = brd.create('point', [x,y], {visible:false}); | |||
brd.create('circle', [p, 0.35], { | |||
strokeColor:'black', | |||
fillColor:'white' | |||
}); | |||
brd.create('text',[()=>p.X(), ()=>p.Y(), labelText], | |||
{anchorX:'middle', anchorY:'middle', fontSize:12}); | |||
return p; | |||
} | |||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
// Linien | // Linien | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
function connect(A, B, arrow){ | function connect(A, B, arrow){ | ||
if(arrow){ | |||
return brd.create(' | return brd.create('arrow', [A, B], {strokeWidth:2}); | ||
} | |||
return brd.create('line', [A, B], {straightFirst:false, straightLast:false, strokeWidth:2}); | |||
} | } | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
// | // Einzelteile | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
let E1 = createRect(0,8,2,1,'E1'); | let E1 = createRect(0,8,2,1,'E1'); | ||
let E2 = createRect(3,8,2,1,'E2'); | let E2 = createRect(3,8,2,1,'E2'); | ||
let E3 = createRect(6,8,2,1,'E3'); | let E3 = createRect(6,8,2,1,'E3'); | ||
let E4 = createRect(9,8,2,1,'E4'); | let E4 = createRect(9,8,2,1,'E4'); | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
// | // Bauteile | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
let B1 = createRect(0.5,3,2,1,'B1'); | let B1 = createRect(0.5,3,2,1,'B1'); | ||
let B2 = createRect(3.5,3,2,1,'B2'); | let B2 = createRect(3.5,3,2,1,'B2'); | ||
let B3 = createRect(6.5,3,2,1,'B3'); | let B3 = createRect(6.5,3,2,1,'B3'); | ||
let B4 = createRect(9.5,3,2,1,'B4'); | let B4 = createRect(9.5,3,2,1,'B4'); | ||
let B5 = createRect(12.5,3,2,1,'B5'); | let B5 = createRect(12.5,3,2,1,'B5'); | ||
// ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
// | // Verbindung | ||
// ------------------------------------------------------------- | |||
// ------------------------------------------------------------- | function makeConnection(E, B, amount, yMid){ | ||
let cx = ()=> (E.centerX() + B.centerX())/2; | |||
let cy = yMid; | |||
let circlePoint = createCircleNode( cx(), cy, amount ); | |||
connect([()=>E.centerX(), ()=>E.centerY()-0.5], circlePoint, false); | |||
connect(circlePoint, [()=>B.centerX(), ()=>B.centerY()+0.5], true); | |||
} | |||
// ------------------------------------------------------------- | |||
// Kanten | |||
// ------------------------------------------------------------- | |||
makeConnection(E1, B1, "2", 6); | |||
makeConnection(E2, B1, "1", 6); | |||
makeConnection(E1, B2, "2", 6); | |||
makeConnection(E1, | makeConnection(E2, B2, "1", 6); | ||
makeConnection(E2, | |||
makeConnection(E1, B3, "1", 6); | |||
makeConnection( | makeConnection(E2, B3, "1", 6); | ||
makeConnection( | makeConnection(E3, B3, "1", 6); | ||
makeConnection(E1, B4, "2", 6); | |||
makeConnection(E1, | makeConnection(E3, B4, "1", 6); | ||
makeConnection( | makeConnection(E4, B4, "1", 6); | ||
makeConnection( | |||
makeConnection(E1, B5, "1", 6); | |||
makeConnection(E4, B5, "2", 6); | |||
makeConnection(E1, B5, "1", 6); | |||
makeConnection(E4, B5, "2", 6); | |||
}); | |||
</script> | </script> | ||
</html> | </html> | ||
== Beispiel 2: Rezeptstruktur eines Gerichts == | == Beispiel 2: Rezeptstruktur eines Gerichts == | ||