Gozintograph: Unterschied zwischen den Versionen
| Zeile 25: | Zeile 25: | ||
<html> | <html> | ||
<div id=" | <div id="gozinto_exakt" 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_exakt', { | ||
boundingbox: [-1, 9, 13, -1], | boundingbox: [-1, 9, 13, -1], | ||
axis: false, | axis: false, | ||
| Zeile 43: | Zeile 43: | ||
brd.create('text',[(x1+x2)/2,(y1+y2)/2,text], | brd.create('text',[(x1+x2)/2,(y1+y2)/2,text], | ||
{anchorX:'middle',anchorY:'middle',strokeColor:'black',fontSize:14}); | {anchorX:'middle',anchorY:'middle',strokeColor:'black',fontSize:14}); | ||
return poly; | return {poly: poly, x1:x1, y1:y1, x2:x2, y2:y2}; | ||
} | } | ||
| 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 | // Funktion: exakte Kante von Rand zu Rand mit Kreis | ||
function edge( | function edge(fromRect, toRect, label, offset){ | ||
// | // Startpunkt: Mitte der Unterkante des Einzelteils | ||
var | var fx = (fromRect.x1 + fromRect.x2)/2; | ||
var dy= | var fy = fromRect.y1; | ||
var len=Math.sqrt(dx*dx+dy*dy); | // Endpunkt: Mitte der Oberkante des Bauteils | ||
var ux=dx/len, uy=dy/len; | var tx = (toRect.x1 + toRect.x2)/2; | ||
var px=-uy, py=ux; | var ty = toRect.y2; | ||
// Richtung und senkrechter Offset | |||
var dx = tx - fx, dy = ty - fy; | |||
var len = Math.sqrt(dx*dx + dy*dy); | |||
var midX=( | var ux = dx/len, uy = dy/len; | ||
var midY=( | var px = -uy, py = ux; | ||
var gap=0.3; | fx += px*offset; fy += py*offset; | ||
var p1=[midX-ux*gap, midY-uy*gap]; | tx += px*offset; ty += py*offset; | ||
var p2=[midX+ux*gap, midY+uy*gap]; | |||
// Mittelpunkt für Kreis | |||
var midX = (fx + tx)/2; | |||
var midY = (fy + ty)/2; | |||
var gap = 0.3; | |||
var p1 = [midX - ux*gap, midY - uy*gap]; | |||
var p2 = [midX + ux*gap, midY + uy*gap]; | |||
// Linie bis zum Kreis (keine Spitze) | // Linie bis zum Kreis (keine Spitze) | ||
brd.create('line',[ | brd.create('line', [[fx, fy], p1], { | ||
// Linie | straightFirst: false, straightLast: false, | ||
brd.create('arrow',[p2, | strokeColor: '#000', strokeWidth: 1.5 | ||
}); | |||
// Linie vom Kreis bis zum Ziel (mit Spitze) | |||
brd.create('arrow', [p2, [tx, ty]], { | |||
strokeColor: '#000', strokeWidth: 1.5 | |||
}); | |||
// Kreis mit Beschriftung | // Kreis mit Beschriftung | ||
brd.create('circle',[[midX,midY],0.2],{fillColor:'white',strokeColor:'black'}); | brd.create('circle', [[midX, midY], 0.2], { | ||
brd.create('text',[midX,midY,label], | fillColor: 'white', strokeColor: 'black' | ||
}); | |||
brd.create('text', [midX, midY, label], { | |||
anchorX: 'middle', anchorY: 'middle', fontSize: 11 | |||
}); | |||
} | } | ||
// --- Kanten | // --- Kanten exakt zwischen Rechteckrändern --- | ||
// B1: E1,E2 | // B1: E1,E2 | ||
edge( | edge(E1, B1, '2', -0.15); | ||
edge( | edge(E2, B1, '1', 0.15); | ||
// B2: E1,E2 | // B2: E1,E2 | ||
edge( | edge(E1, B2, '2', -0.15); | ||
edge( | edge(E2, B2, '1', 0.15); | ||
// B3: E1,E2,E3 | // B3: E1,E2,E3 | ||
edge( | edge(E1, B3, '1', -0.25); | ||
edge( | edge(E2, B3, '1', 0); | ||
edge( | edge(E3, B3, '1', 0.25); | ||
// B4: E1,E3,E4 | // B4: E1,E3,E4 | ||
edge( | edge(E1, B4, '2', -0.25); | ||
edge( | edge(E3, B4, '1', 0); | ||
edge( | edge(E4, B4, '1', 0.25); | ||
// B5: E1,E4 | // B5: E1,E4 | ||
edge( | edge(E1, B5, '1', -0.15); | ||
edge( | edge(E4, B5, '2', 0.15); | ||
</script> | </script> | ||