Gozintograph: Unterschied zwischen den Versionen
| Zeile 27: | Zeile 27: | ||
<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', { | ||
boundingbox: [-1, | boundingbox: [-1, 10, 15, -1], | ||
axis: false, | axis: false, | ||
showNavigation | showNavigation: false | ||
}); | }); | ||
// --- | // ------------------------------------------------------------- | ||
function | // Hilfsfunktion: Rechteck als Polygon aus 4 Punkten erzeugen | ||
// ------------------------------------------------------------- | |||
function createRect(x,y,w,h,labelText) { | |||
let p1 = brd.create('point', [x, y], {visible:false, fixed:false}); | |||
let p2 = brd.create('point', [x+w, y], {visible:false, fixed:false}); | |||
let p3 = brd.create('point', [x+w, y-h], {visible:false, fixed:false}); | |||
let p4 = brd.create('point', [x, y-h], {visible:false, fixed:false}); | |||
let poly = brd.create('polygon', [p1,p2,p3,p4], { | |||
fillColor:'#3498db', | fillColor:'#3498db', | ||
fillOpacity:0. | fillOpacity:0.8, | ||
borders:{strokeWidth:2, strokeColor:'#1f4e78'}, | |||
hasInnerPoints:true | |||
}); | }); | ||
brd.create('text',[( | |||
{anchorX:'middle',anchorY:'middle',strokeColor:'black',fontSize: | let label = brd.create('text', | ||
return { | [ ()=>(p1.X()+p3.X())/2, | ||
()=>(p1.Y()+p3.Y())/2, | |||
labelText ], | |||
{anchorX:'middle', anchorY:'middle', strokeColor:'black', fontSize:14} | |||
); | |||
return {p1:p1,p2:p2,p3:p3,p4:p4,centerX:()=> (p1.X()+p3.X())/2, centerY:()=> (p1.Y()+p3.Y())/2}; | |||
} | } | ||
// --- | // ------------------------------------------------------------- | ||
// | // Hilfsfunktion: Kreis-Knoten mit Punkt + Beschriftung | ||
// ------------------------------------------------------------- | |||
function createCircleNode(x,y,labelText){ | |||
let p = brd.create('point', [x,y], {visible:false}); | |||
let c = brd.create('circle', [p, 0.35], { | |||
strokeColor:'black', | |||
fillColor:'white', | |||
fillOpacity:1 | |||
}); | |||
let t = brd.create('text',[()=>p.X(), ()=>p.Y(), labelText], | |||
{anchorX:'middle', anchorY:'middle', fontSize:12, strokeColor:'black'} | |||
); | |||
return p; | |||
} | |||
// --- | // ------------------------------------------------------------- | ||
function | // Linien erstellen, die immer verbunden bleiben | ||
// ------------------------------------------------------------- | |||
function connect(A, B, arrow){ | |||
if(arrow){ | |||
return brd.create('arrow', [A, B], {strokeWidth:2}); | |||
} | |||
return brd.create('line', [A, B], { | |||
straightFirst:false, straightLast:false, strokeWidth:2 | |||
}); | |||
} | |||
// ------------------------------------------------------------- | |||
// Rechtecke für EINZELTEILE (oben) | |||
// ------------------------------------------------------------- | |||
let E1 = createRect(0,8,2,1,'E1'); | |||
let E2 = createRect(3,8,2,1,'E2'); | |||
let E3 = createRect(6,8,2,1,'E3'); | |||
let E4 = createRect(9,8,2,1,'E4'); | |||
// ------------------------------------------------------------- | |||
// Rechtecke für BAUTEILE (unten) | |||
// ------------------------------------------------------------- | |||
let B1 = createRect(0.5,3,2,1,'B1'); | |||
let B2 = createRect(3.5,3,2,1,'B2'); | |||
let B3 = createRect(6.5,3,2,1,'B3'); | |||
let B4 = createRect(9.5,3,2,1,'B4'); | |||
let B5 = createRect(12.5,3,2,1,'B5'); | |||
// ------------------------------------------------------------- | |||
// Beispielkanten (wie von dir definiert) | |||
// Struktur: E → Kreis → B | |||
// ------------------------------------------------------------- | |||
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 ); | |||
} | } | ||
// B1: E1 & E2 | |||
// B1: E1 | makeConnection(E1, B1, "2", 6); | ||
makeConnection(E2, B1, "1", 6); | |||
// B2: E1 | // B2: E1 & E2 | ||
makeConnection(E1, B2, "2", 6); | |||
makeConnection(E2, B2, "1", 6); | |||
// B3: E1 | // B3: E1 & E2 & E3 | ||
makeConnection(E1, B3, "1", 6); | |||
makeConnection(E2, B3, "1", 6); | |||
makeConnection(E3, B3, "1", 6); | |||
// B4: E1 | // B4: E1 & E3 & E4 | ||
makeConnection(E1, B4, "2", 6); | |||
makeConnection(E3, B4, "1", 6); | |||
makeConnection(E4, B4, "1", 6); | |||
// B5: E1 | // B5: E1 & E4 | ||
makeConnection(E1, B5, "1", 6); | |||
makeConnection(E4, B5, "2", 6); | |||
</script> | </script> | ||