<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<!-- question: 0  -->
  <question type="category">
    <category>
      <text>$course$/top/Grundbegriffe</text>
    </category>
    <info format="html">
      <text></text>
    </info>
    <idnumber></idnumber>
  </question>

<!-- question: 0  -->
  <question type="category">
    <category>
      <text>$course$/top/Grundbegriffe/Rechenregeln</text>
    </category>
    <info format="moodle_auto_format">
      <text></text>
    </info>
    <idnumber></idnumber>
  </question>

<!-- question: 0  -->
  <question type="category">
    <category>
      <text>$course$/top/Grundbegriffe/Rechenregeln/Trigonometrie</text>
    </category>
    <info format="html">
      <text></text>
    </info>
    <idnumber></idnumber>
  </question>

<!-- question: 966123  -->
  <question type="stack">
    <name>
      <text>Satellitenempfang</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p style="text-align: justify;">Seien \(S_1,...,S_n\) künstliche Satelliten, die sich auf einem gemeinsamen 
konzentrischen äquatorialen Orbit mit Bahnradius \(r = {@ORad@}\,\text{km}\) um den Planeten {@PlanetNameList[Planet]@} befinden. Entnehmen Sie die zur weiteren Untersuchung erforderlichen Größen der folgenden Tabelle.</p>
<p style="text-align: justify;">
<table cellpadding="5">
    <tbody>
        <tr bgcolor="#F6F6F6">
            <td align="center">Name</td>
            <td>Masse [kg]</td>
            <td>siderischer Tag [h]</td>
            <td>Äquatordurchmesser [km]</td>
        </tr>
        <tr align="right">
            <td align="center">{@PlanetNameList[1]@}</td>
            <td>\({@ PlanetMassListOCV[1]@} \cdot 10^{{@ PlanetMassListOoM[1]@}}\)</td>
            <td>\({@PlanetDayList[1][1]@}\)</td>
            <td>\({@PlanetDiamList[1][1]@}\)</td>
        </tr>
        <tr align="right">
            <td align="center">{@PlanetNameList[2]@}</td>
            <td>\({@ PlanetMassListOCV[2]@} \cdot 10^{{@ PlanetMassListOoM[2]@}}\)</td>
            <td>\({@PlanetDayList[2][1]@}\)</td>
            <td>\({@PlanetDiamList[2][1]@}\)</td>
        </tr>
        <tr align="right">
            <td align="center">{@PlanetNameList[3]@}</td>
            <td>\({@ PlanetMassListOCV[3]@} \cdot 10^{{@ PlanetMassListOoM[3]@}}\)</td>
            <td>\({@PlanetDayList[3][1]@}\)</td>
            <td>\({@PlanetDiamList[3][1]@}\)</td>
        </tr>
        <tr align="right">
            <td align="center">{@PlanetNameList[4]@}</td>
            <td>\({@PlanetMassListOCV[4]@} \cdot 10^{{@ PlanetMassListOoM[4]@}}\)</td>
            <td>\({@PlanetDayList[4][1]@}\)</td>
            <td>\({@PlanetDiamList[4][1]@}\)</td>
        </tr>
    </tbody>
</table>
</p>
<hr>
<p style="text-align: justify;">Die folgende Abbildung zeigt modellhaft \(n = 3\) Satelliten \(S_1\), \(S_2\) und \(S_3\) (Punkte <font color="#DC267F">\(\bullet\)</font>) auf ihrem gemeinsamen konzentrischen äquatorialen Orbit um den Planeten Erde (blaue Kugel) im Bezugssystem eines Beobachters auf der Erdoberfläche.</p>
<p>
[[jsxgraph width="380px" height="380px"]]
const board = JXG.JSXGraph.initBoard(divid, {
  boundingbox: [-1.9, 1.9, 1.9, -1.9],
  axis: false,
  showCopyright: false,
  keepaspectratio: true,
  showNavigation: false,
  fixed: true,
  zoom: {
    wheel: false,
    enabled: false
  },
  pan: {
    needTwoFingers: false,
    enabled: false
  }
});

/* ---- colors ---- */

const Color1 = `hsl(${223}, ${100}%, ${70}%)`; /* #648FFF */
const Color2 = `hsl(${251}, ${83}%, ${65}%)`; /* #785EF0 */
const Color3 = `hsl(${331}, ${72}%, ${51}%)`; /* #DC267F */
const Color4 = `hsl(${23}, ${100}%, ${50}%)`; /* #FE6100 */
const Color5 = `hsl(${41}, ${100}%, ${50}%)`; /* #FFB000 */

/* —--- ----- ----- */

var DomainPoint1 = board.create('point', [5, 5], {
  visible: false
})
var DomainPoint2 = board.create('point', [-5, -5], {
  visible: false
})

var VirtualDomainXL = 0;
var VirtualDomainXR = 2 * Math.PI;
var VirtualDomainYU = Math.PI / 2;
var VirtualDomainYD = -Math.PI / 2

board.create('polygon', [
  DomainPoint1,
  [DomainPoint2.X(), DomainPoint1.Y()],
  DomainPoint2,
  [DomainPoint1.X(), DomainPoint2.Y()]
], {
  vertices: {
    visible: false
  },
  borders: {
    visible: false
  },
  highlight: false,
  fillcolor: 'black',
  fillopacity: 1,
  fixed: true,
  layer: 0,
  visible: true,
});

var SliderRotationX = board.create('slider', [
  [-1.3, -1.75],
  [0.9, -1.75],
  [-1, 0, 1]
], {
  withLabel: true,
  highlight: false,
  name: 'az',
  postLabel: ' &pi;',
  strokecolor: 'white',
  fillcolor: 'black',
  baseline: {
    strokeColor: 'white'
  },
  highline: {
    strokeColor: 'white'
  },
  label: {
    strokeColor: 'white',
    highlight: false,
  },
  visible: true,
});
var SliderRotationZ = board.create('slider', [
  [-1.75, -1.3],
  [-1.75, 1.3],
  [0, 0.5, 0.5]
], {
  withLabel: true,
  highlight: false,
  name: 'el',
  postLabel: ' &pi;',
  strokecolor: 'white',
  fillcolor: 'black',
  baseline: {
    strokeColor: 'white'
  },
  highline: {
    strokeColor: 'white'
  },
  label: {
    strokeColor: 'white',
    highlight: false,
  },
  visible: true,
});
var SliderOffSet = board.create('slider', [
  [1.75, -1.3],
  [1.75, 1.3],
  [0, 0.22, 1]
], {
  withLabel: false,
  highlight: false,
  strokecolor: 'white',
  fillcolor: 'black',
  baseline: {
    strokeColor: 'white'
  },
  highline: {
    strokeColor: 'white'
  },
  label: {
    strokeColor: 'white',
    highlight: false,
  },
  visible: false,
});

var SliderOffSetLabel = board.create('text', [1.75, 1.43, function() {
  return "ALT = " + JXG.toFixed(19.8 * SliderOffSet.Value() + 0.2, 1) + " 10^3 km"
}], {
  anchorX: 'right',
  fixed: true,
  hihightlight: false,
  visible: false,
  strokecolor: 'white',
});

var AOP1 = function() {
  return SliderRotationZ.Value() * Math.PI
};
var AOP2 = function() {
  return (SliderRotationX.Value() + 1) * Math.PI
};

var Distance = function(x, y, a, b) {
  return Math.max(Math.abs(x - a), Math.abs(y - b))
};

var DomainTranslation = function() {
  return -0.75 * 0
};
var FunctionValueTranslation = function() {
  return 0.65 * 0
};

var DomainThickness = 0.5;
var FunctionValueThickness = 0.5;

var ProjectionX = function(x, y, z, a, b) {
  return ((-1) * x * Math.cos(b) - (-1) * y * Math.sin(b)) * 1.2
};
var ProjectionY = function(x, y, z, a, b) {
  return ((-1) * x * Math.sin(b) * Math.sin(a) +
    z * Math.cos(a) + (-1) * y * Math.sin(a) * Math.cos(b)) * 1.2
};
var Projection = function(x, y, z, a, b) {
  return [ProjectionX(x, y, z, a, b), ProjectionY(x, y, z, a, b)]
};

var ParamX = function(x, y, a, b) {
  return (-1) * x * Math.cos(b) - (y - DomainTranslation() * Math.cos(a)) * (Math.sin(b) / Math.sin(a))
};
var ParamY = function(x, y, a, b) {
  return x * Math.sin(b) - (y - DomainTranslation() * Math.cos(a)) * (Math.cos(b) / Math.sin(a))
};

var AxisX = board.create('line', [
  [function() {
    return ProjectionX(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }],
  [function() {
    return ProjectionX(1.2, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(1.2, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }]
], {
  strokecolor: 'white',
  strokeWidth: 0.5,
  layer: 0,
  highlight: false,
  fixed: true,
});

var AxisY = board.create('line', [
  [function() {
    return ProjectionX(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }],
  [function() {
    return ProjectionX(0, 1.2, FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(0, 1.2, FunctionValueTranslation(), AOP1(), AOP2())
  }]
], {
  strokecolor: 'white',
  strokeWidth: 0.5,
  layer: 0,
  highlight: false,
  fixed: true,
});

var AxisZ = board.create('line', [
  [function() {
    return ProjectionX(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(0, 0, FunctionValueTranslation(), AOP1(), AOP2())
  }],
  [function() {
    return ProjectionX(0, 0, 1.2 + FunctionValueTranslation(), AOP1(), AOP2())
  }, function() {
    return ProjectionY(0, 0, 1.2 + FunctionValueTranslation(), AOP1(), AOP2())
  }]
], {
  strokecolor: 'white',
  strokeWidth: function() {
    if (SliderRotationZ.Value() >= 0.477) {
      return 0
    } else {
      return 0.5
    }
  },
  layer: 0,
  highlight: false,
  fixed: true,
});

var SurfaceX = function(r, x, y) {
  return Math.cos(x) * r * Math.cos(y)
};
var SurfaceY = function(r, x, y) {
  return Math.sin(x) * r * Math.cos(y)
};
var SurfaceZ = function(r, x, y) {
  return r * Math.sin(y)
};

var SurfaceProjectionX = function(r, x, y) {
  return ProjectionX(SurfaceX(r, x, y), SurfaceY(r, x, y), SurfaceZ(r, x, y), AOP1(), AOP2())
};
var SurfaceProjectionY = function(r, x, y) {
  return ProjectionY(SurfaceX(r, x, y), SurfaceY(r, x, y), SurfaceZ(r, x, y), AOP1(), AOP2())
};

var CameraX = function() {
  return SurfaceX(1, -AOP2() + Math.PI / 2, AOP1())
};
var CameraY = function() {
  return SurfaceY(1, -AOP2() + Math.PI / 2, AOP1())
};
var CameraZ = function() {
  return SurfaceZ(1, -AOP2() + Math.PI / 2, AOP1())
};

var TimeElapsedSun = 0;

var LightX = function() {
  return SurfaceX(1, TimeElapsedSun, 0)
};
var LightY = function() {
  return SurfaceY(1, TimeElapsedSun, 0)
};
var LightZ = function() {
  return SurfaceZ(1, TimeElapsedSun, 0)
};

var Res = 16;
var SR = (Math.PI / Res);
var OS = -0.01;
var PlanetRadius = function(){return 2 * 0.151};
var OrbitRadius = function(){return  (1-SliderOffSet.Value()) * 1.0314 * PlanetRadius() + SliderOffSet.Value() * 2 * 0.623};

var ConeAngle = function(){return Math.acos(PlanetRadius()/OrbitRadius())};
var ConeHeight = function(){return (PlanetRadius()*PlanetRadius())/OrbitRadius()};
var ConeRadius = function(){return Math.sqrt((PlanetRadius()*PlanetRadius())-(ConeHeight()*ConeHeight()))};


var Shadow = function(x) {
  if (x > 0) {
    return 3 * x
  } else {
    return 0.5 * x
  }
};

function getColor(value) {
  const hue = 200;
  const saturation = 100;
  const lightness = (1 - Shadow(value)) * 50;
  const color = `hsl(${hue}, ${saturation}%, ${lightness}%)`;
  return color;
}

for (let j = -Res / 2; j <= Res / 2 - 1; j++) {
  for (let i = 0; i <= 2 * Res - 1; i++) {
    board.create('polygon', [
      [function() {
          return SurfaceProjectionX(PlanetRadius(), i * SR + OS, j * SR + OS)
        },
        function() {
          return SurfaceProjectionY(PlanetRadius(), i * SR + OS, j * SR + OS)
        }
      ],
      [function() {
          return SurfaceProjectionX(PlanetRadius(), (i + 1) * SR, j * SR + OS)
        },
        function() {
          return SurfaceProjectionY(PlanetRadius(), (i + 1) * SR, j * SR + OS)
        }
      ],
      [function() {
          return SurfaceProjectionX(PlanetRadius(), (i + 1) * SR, (j + 1) * SR)
        },
        function() {
          return SurfaceProjectionY(PlanetRadius(), (i + 1) * SR, (j + 1) * SR)
        }
      ],
      [function() {
          return SurfaceProjectionX(PlanetRadius(), i * SR + OS, (j + 1) * SR)
        },
        function() {
          return SurfaceProjectionY(PlanetRadius(), i * SR + OS, (j + 1) * SR)
        }
      ]
    ], {
      vertices: {
        visible: false
      },
      borders: {
        visible: false
      },
      highlight: false,
      fillcolor: function() {
        return getColor(SurfaceX(1, i * SR, j * SR) * LightX() +
          SurfaceY(1, i * SR, j * SR) * LightY() +
          SurfaceZ(1, i * SR, j * SR) * LightZ() + 0.15)
      },
      fillopacity: 1,
      fixed: true,
      layer: 9,
      visible: function() {
        if (SurfaceX(1, i * SR, j * SR) * CameraX() +
          SurfaceY(1, i * SR, j * SR) * CameraY() +
          SurfaceZ(1, i * SR, j * SR) * CameraZ() > -0.02) {
          return true
        } else {
          return false
        }
      },
    });
  }
}

var IsPlaying = false;
var StartTime = 0;
var TimeElapsedOrange = 0;
var TimeElapsedYellow = 0;
var RequestId = 0;

var Observer = board.create('point',
  [() => SurfaceProjectionX(PlanetRadius(), 0, 0), () => SurfaceProjectionY(PlanetRadius, 0, 0)], {
    size: 1.5,
    highlight: false,
    fixed: true,
    strokecolor: 'white',
    fillcolor: 'white',
    showInfobox: false,
    layer: 13,
    label: {
      color: 'white',
      highlight: false,
      autoPosition: false,
      offset: [10, 10],
    },
    name: 'O',
  });

var RedSat1 = board.create('point',
  [() => SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange, 0), () => SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange, 0)], {
    size: 1.5,
    highlight: false,
    fixed: true,
    strokecolor: Color3,
    fillcolor: Color3,
    showInfobox: false,
    layer: 11,
    label: {
      color: Color3,
      autoPosition: false,
      offset: [10, -10],
      highlight: false,
    },
    name: 'S_1',
  });


var RedOrbitSegment1 = board.create('curve',
  [function(t) {
      return SurfaceProjectionX(OrbitRadius(), t + TimeElapsedOrange, 0)
    },
    function(t) {
      return SurfaceProjectionY(OrbitRadius(), t + TimeElapsedOrange, 0)
    },
    0, -Math.PI * 0.083
  ], {
    strokecolor: Color3,
    strokeWidth: FunctionValueThickness * 4,
    highlight: false,
    fixed: true,
    visible: true,
    layer: 11,
  }
);

var RedSat2 = board.create('point',
  [() => SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+2.094, 0), () => SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+2.094, 0)], {
    size: 1.5,
    highlight: false,
    fixed: true,
    strokecolor: Color3,
    fillcolor: Color3,
    showInfobox: false,
    layer: 11,
    label: {
      color: Color3,
      autoPosition: false,
      offset: [10, -10],
      highlight: false,
    },
    name: 'S_2',
  });

var RedOrbitSegment2 = board.create('curve',
  [function(t) {
      return SurfaceProjectionX(OrbitRadius(), t + TimeElapsedOrange+2.094, 0)
    },
    function(t) {
      return SurfaceProjectionY(OrbitRadius(), t + TimeElapsedOrange+2.094, 0)
    },
    0, -Math.PI * 0.083
  ], {
    strokecolor: Color3,
    strokeWidth: FunctionValueThickness * 4,
    highlight: false,
    fixed: true,
    visible: true,
    layer: 11,
  }
);

var RedSat3 = board.create('point',
  [() => SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+4.188, 0), () => SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+4.188, 0)], {
    size: 1.5,
    highlight: false,
    fixed: true,
    strokecolor: Color3,
    fillcolor: Color3,
    showInfobox: false,
    layer: 11,
    label: {
      color: Color3,
      autoPosition: false,
      offset: [10, -10],
      highlight: false,
    },
    name: 'S_3',
  });

var RedOrbitSegment3 = board.create('curve',
  [function(t) {
      return SurfaceProjectionX(OrbitRadius(), t + TimeElapsedOrange+4.188, 0)
    },
    function(t) {
      return SurfaceProjectionY(OrbitRadius(), t + TimeElapsedOrange+4.188, 0)
    },
    0, -Math.PI * 0.083
  ], {
    strokecolor: Color3,
    strokeWidth: FunctionValueThickness * 4,
    highlight: false,
    fixed: true,
    visible: true,
    layer: 11,
  }
);



for (let i = 0; i <= 2; i++) {
board.create('curve',
  [function(t) {
      if (t <= 1) {
        return SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange + ((2*t)-1) * ConeAngle()+(i*2.094), 0)
      }
      if (t > 1 && t <= 2) {
        return ((1-(t-1))*SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange + ConeAngle()+(i*2.094), 0))
        + ((t-1)*SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      } else {
        return (t-2)*SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange - ConeAngle()+(i*2.094),0)
        + ((1-(t-2))*SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      }
    },
    function(t) {
      if (t <= 1) {
        return SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange + ((2*t)-1) * ConeAngle()+(i*2.094), 0)
      }
      if (t > 1 && t <= 2) {
        return ((1-(t-1))*SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange + ConeAngle()+(i*2.094), 0))
       + ((t-1)*SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      } else {
        return (t-2)*SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange - ConeAngle()+(i*2.094), 0)
        + ((1-(t-2))*SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      }
    },
    0, 3
  ], {
    fillcolor: Color3,
    fillopacity: 0,
    highlight: false,
    strokewidth: 0.5,
    strokecolor: Color3,
    fixed: true,
    layer: 12,   
  });
board.create('curve',
  [function(t) {
      if (t <= 1) {
        return SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange+(i*2.094), ((2*t)-1) * ConeAngle())
      }
      if (t > 1 && t <= 2) {
        return ((1-(t-1))*SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange+(i*2.094), ConeAngle()))
        + ((t-1)*SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      } else {
        return ((t-2)*SurfaceProjectionX(PlanetRadius(), TimeElapsedOrange+(i*2.094), (-1)*ConeAngle()))
        + ((1-(t-2))*SurfaceProjectionX(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      }
    },
    function(t) {
      if (t <= 1) {
        return SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange+(i*2.094), ((2*t)-1) * ConeAngle())
      }
      if (t > 1 && t <= 2) {
        return ((1-(t-1))*SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange+(i*2.094), ConeAngle()))
        + ((t-1)*SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      } else {
        return ((t-2)*SurfaceProjectionY(PlanetRadius(), TimeElapsedOrange+(i*2.094), (-1)*ConeAngle()))
        + ((1-(t-2))*SurfaceProjectionY(OrbitRadius(), TimeElapsedOrange+(i*2.094), 0))
      }
    },
    0, 3
  ], {
    fillcolor: Color3,
    fillopacity: 0,
    highlight: false,
    strokewidth: 0.5,
    strokecolor: Color3,
    fixed: true,
    layer: 12,   
  });
board.create('curve',
  [function(t) {
      return ConeHeight()*SurfaceProjectionX(1, TimeElapsedOrange +(i*2.094) , 0)
      + Math.cos(t)*ConeRadius()*SurfaceProjectionX(1, TimeElapsedOrange + 1.5705+(i*2.094), 0)
      + Math.sin(t)*ConeRadius()*SurfaceProjectionX(1, 0, 1.5705)      
    },
    function(t) {
      return ConeHeight()*SurfaceProjectionY(1, TimeElapsedOrange+(i*2.094), 0)
      + Math.cos(t)*ConeRadius()*SurfaceProjectionY(1, TimeElapsedOrange + 1.5705+(i*2.094), 0)
      + Math.sin(t)*ConeRadius()*SurfaceProjectionY(1, 0, 1.5705)      
    },
    0, 2 * Math.PI
  ], {
    fillcolor: Color3,
    fillopacity: 0,
    highlight: false,
    strokewidth: 0.5,
    strokecolor: Color3,
    fixed: true,
    layer: 12,  
  }
);
}

board.create('curve',
  [function(t) {
      return SurfaceProjectionX(OrbitRadius(), t, 0)
    },
    function(t) {
      return SurfaceProjectionY(OrbitRadius(), t, 0)},
    0, 2 * Math.PI
  ], {
    strokecolor: 'grey',
    strokeWidth: FunctionValueThickness,
    highlight: false,
    fixed: true,
    visible: true,
    layer: 10,
  }
);


function AnimationPlaying() {
  TimeElapsedOrange = 2 * 6.888 * (Date.now() - StartTime) / 100000;
  TimeElapsedSun = -2 * 6.894 * (Date.now() - StartTime) / 100000;
  board.update();
  RequestId = window.requestAnimationFrame(AnimationPlaying);
};

function Play() {
  if (!IsPlaying) {
    StartTime = Date.now() - TimeElapsedYellow * 1000;
    IsPlaying = true;
    AnimationPlaying();
  }
};

function AnimationStop() {
  if (RequestId) {
    window.cancelAnimationFrame(RequestId);
  }
  IsPlaying = false;
  board.update();
};

function AnimationReset() {
  if (RequestId) {
    window.cancelAnimationFrame(RequestId);
  }
  StartTime = 0
  TimeElapsedSun = 0;
  TimeElapsedOrange = 0;
  IsPlaying = false;
  board.update();
};

var StartButtonText = 'Start';

var StarButton = board.create('button', [-1.86, 1.78, 'Start', function() {
  if (!IsPlaying) {
    Play();
  }
}]);

var StopButton = board.create('button', [-1.37, 1.78, 'Stop', function() {
  if (IsPlaying) {
    AnimationStop();
  }
}]);

var ResetButton = board.create('button', [-0.9, 1.78, 'Reset Animation', function() {
  AnimationReset();
}]);

var ResetButton = board.create('button', [0.2, 1.78, 'Reset Camera', function() {
  SliderRotationX.setValue(0);
  SliderRotationZ.setValue(0.5);
}]);

[[/jsxgraph]]</p>
<hr>
<p style="text-align: justify;">Bestimmen Sie mithilfe von Methoden der ebenen Geometrie die minimale Anzahl \(n\) an Satelliten, sodass an jedem Punkt des Äquators mindestens ein Satellit am Himmel steht. </p>
          <p style="text-align: justify;">Es ist \(n = \) [[input:ans1]].</p>
          <p style="text-align: justify;">[[validation:ans1]]</p>
          <p style="text-align: justify;">[[feedback:prt1]]</p>
<hr>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p style="text-align: justify;">Die minimale Anzahl \(n\) an Satelliten, sodass an jedem Punkt des Äquators mindestens ein Satellit am Himmel steht, lässt sich wie folgt bestimmen: Sei \(A\) der geometrische Mittelpunkt des Planeten {@PlanetNameList[Planet]@}, sei \(B\) der Punkt an dem sich ein stationärer Satellit \(S\) befindet und sei \(C\) ein Punkt am Äquator, an dem \(S\) genau am Horizont zu stehen scheint. Die Punkte \(A\), \(B\) und \(C\) definieren ein rechtwinkliges Dreieck mit rechtem Winkel am Punkt \(C\). Die Länge der Strecke \(\overline{AB}\) zwischen \(A\) und \(B\) entspricht dem Radius \(r\) des Orbits von \(S\) und die Länge der Strecke \(\overline{AC}\) zwischen \(A\) und \(C\) entspricht genau der Hälfte des Äquatordurchmessers  \(d\) des Planeten {@PlanetNameList[Planet]@}. Es lässt sich \(n\) bestimmen als die kleinste natürliche Zahl die größer ist als der Quotient zwischen dem Bogenmaß \(2 \pi\) des Einheitskreises und \(2\)-mal dem Winkel \(\alpha\) zwischen den Strecken \(\overline{AB}\) und \(\overline{AC}\) in Bogemaß, nämlich
<p style="text-align: justify; margin-left:30px">\(\displaystyle 
n = \left\lceil \frac{\pi}{\arccos\left(\frac{2r}{d}\right)} \right\rceil.\)</p>
Es ist also \(n = {@MNoS@}\).</p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.0000000</penalty>
    <hidden>0</hidden>
    <idnumber></idnumber>
    <stackversion>
      <text>2023010400</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[/*
  Satellitenempfang

  wurde entwickelt von
 
    Benjamin Herbert Schulz-Rosenberger <benjamin.schulz-c95[at]ruhr-uni-bochum.de>

  nach einer Idee von
 
    Benjamin Herbert Schulz-Rosenberger <benjamin.schulz-c95[at]ruhr-uni-bochum.de>

  an der Ruhr-Universität Bochum.

  Dieses Werk ist lizenziert unter einer Creative Commons
  Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International
  Lizenz. Um eine Kopie der Lizenz zu erhalten, besuchen Sie
  http://creativecommons.org/licenses/by-sa/4.0/.

  SPDX-License-Identifier: CC-BY-SA-4.0

*/

/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */

/* Listen der Planeten / Definitionen */
PlanetNameList : ["Merkur","Venus","Erde","Mars"] ;
PlanetMassList : [[3.301*10^23,4], [48.675*10^23,5], [59.722*10^23,5], [6.417*10^23,4]] ;
PlanetDayList : [[1407.5,5], [5832.5,5], [23.93,4], [24.6,3]] ;
PlanetDiamList : [[4879.4,5], [12103.6,6], [12756.3,6], [6792.4,5]] ;
NumberOfPlanets : length(PlanetNameList);


/* Größenordnung */
OoM(x) := floor(log(abs(x))/log(10)); /* order of magnitude of x */
CV(x,n) := x*10^(-n); /* corrected value */
OCV(x) := CV(x,OoM(x)); /* order corrected value */

/* Randomisierte Auswahl eines Planeten */
Planet : rand(NumberOfPlanets-1)+1;
PlanetMassListOoM: makelist(OoM(PlanetMassList[i][1]), i, 1, NumberOfPlanets);
PlanetMassListOCV: makelist(CV(PlanetMassList[i][1],PlanetMassListOoM[i]), i, 1, NumberOfPlanets);
RMNos : rand(7)+3;
RSumL : (PlanetDiamList[Planet][1]/(2*cos(%pi/RMNos))) + (PlanetDiamList[Planet][1]/(2*cos(%pi/(RMNos +1)))) - PlanetDiamList[Planet][1];
ORad : decimalplaces((PlanetDiamList[Planet][1]/2)+ RSumL+1,1);
ORadUnit : stackunits(ORad,km);

/* Antworten / Formatierung */
/* minimale Anzahl */
MNoS : ceiling(%pi/(acos((PlanetDiamList[Planet][1])/(2*ORad))))]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text></text>
    </specificfeedback>
    <questionnote>
      <text>Hinweis</text>
    </questionnote>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text></text>
    </prtincorrect>
    <multiplicationsign>dot</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>[</matrixparens>
    <variantsselectionseed></variantsselectionseed>
    <input>
      <name>ans1</name>
      <type>numerical</type>
      <tans>MNoS</tans>
      <boxsize>15</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords>solve, find_root, algsys</forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>0</mustverify>
      <showvalidation>0</showvalidation>
      <options></options>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text>TAnsF : MNoS;</text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans1</sans>
        <tans>TAnsF</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt4-1-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;"><strong>Ihre Antwort ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt4-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;"><strong>Ihre Antwort ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <qtest>
      <testcase>1</testcase>
      <testinput>
        <name>ans1</name>
        <value>MNoS</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty>0.0000000</expectedpenalty>
        <expectedanswernote>prt4-1-T</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>2</testcase>
      <testinput>
        <name>ans1</name>
        <value>MNoS+1</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty>0.0000000</expectedpenalty>
        <expectedanswernote>prt4-1-F</expectedanswernote>
      </expected>
    </qtest>
    <tags>
      <tag><text>Trigonometrie</text>
</tag>
      <tag><text>Geometrie</text>
</tag>
    </tags>
  </question>

<!-- question: 966298  -->
  <question type="stack">
    <name>
      <text>Sinusgleichung</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p style="text-align: justify;"> Gegeben ist die Gleichung
</p>
<p style="text-align: justify;margin-left: 30px"> \( \sin(x + \pi) - \sin(x) = {@a@}\).</p>
<hr>
<p style="text-align: justify;">Bestimmen Sie die eindeutige Lösung \(\displaystyle x \in \left[- \frac{\pi}{2}, \frac{\pi}{2} \right] \). Geben Sie \(\pi\) gegebenenfalls als <big><code>%pi</code></big> ein.<br></p>
<p style="text-align: justify;"> Es ist \( x = \) [[input:ans1]]&nbsp;</p>
<p>[[validation:ans1]] </p>
<p>[[feedback:prt1]]</p>
<hr>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p style="text-align: justify;">Wegen&nbsp;</p>
<p style="text-align: justify;margin-left: 30px">\(\sin(x+\pi)=\sin(x)\cos(\pi)+\sin(\pi)\cos(x) = -\sin(x)\)&nbsp;</p>
<p style="text-align: justify;">gilt <br></p>
<p style="text-align: justify;margin-left: 30px">\( \begin{align*}&nbsp;&nbsp; &amp; {@a@} =  \sin(x+\pi)-\sin(x) \\ \iff&nbsp;&amp; {@a@}=&nbsp; -\sin(x)-\sin(x)&nbsp;\\ \iff&nbsp;&amp; {@a@}=&nbsp; -2\sin(x) \\ \iff &amp; -\dfrac{{@a@}}{2} = \sin(x). \end{align*}\)</p>
<p style="text-align: justify;">Auf dem Intervall \(\displaystyle \left[- \frac{\pi}{2}, \frac{\pi}{2} \right] \) ist die Sinusfunktion umkehrbar. Daher ist die richtige Lösung&nbsp;</p>
<p style="text-align: justify;margin-left: 30px">\(\displaystyle x = \arcsin \left( {@-a/2@}\right) = {@x@}\).&nbsp;</p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.1000000</penalty>
    <hidden>0</hidden>
    <idnumber></idnumber>
    <stackversion>
      <text>2023010400</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[/*
  Sinusgleichung

  wurde entwickelt von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  nach einer Idee von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  an der Universität Duisburg-Essen.

  Dieses Werk ist lizenziert unter einer Creative Commons
  Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International
  Lizenz. Um eine Kopie der Lizenz zu erhalten, besuchen Sie
  http://creativecommons.org/licenses/by-sa/4.0/.

  SPDX-License-Identifier: CC-BY-SA-4.0

*/

/* Parameter */

x: pi / rand([-6, -4, -3, -2, 2, 3, 4, 6])
a: -2*sin(x)

/* Musterlösung */
ta1: x]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text></text>
    </specificfeedback>
    <questionnote>
      <text>randomisierte Lösung -- {@ta1@} --</text>
    </questionnote>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text></text>
    </prtincorrect>
    <multiplicationsign>dot</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>(</matrixparens>
    <variantsselectionseed></variantsselectionseed>
    <input>
      <name>ans1</name>
      <type>algebraic</type>
      <tans>ta1</tans>
      <boxsize>10</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>0</mustverify>
      <showvalidation>0</showvalidation>
      <options></options>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans1</sans>
        <tans>ta1</tans>
        <testoptions></testoptions>
        <quiet>0</quiet>
        <truescoremode>=</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt1-1-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;">Die Berechnung der eindeutigen Lösung \(x\) ist korrekt.</p><p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist richtig.</strong><br></p>]]></text>
        </truefeedback>
        <falsescoremode>=</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;">Die Berechnung der eindeutigen Lösung \(x\) ist nicht korrekt.</p><p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist falsch.</strong><br></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <tags>
      <tag><text>Gleichung</text>
</tag>
      <tag><text>Additionstheoreme</text>
</tag>
      <tag><text>Sinus</text>
</tag>
      <tag><text>Trigonometrie</text>
</tag>
    </tags>
  </question>

<!-- question: 966124  -->
  <question type="stack">
    <name>
      <text>Tetraeder</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p style="text-align: justify;">Durch die Punkte \(H_1\), \(H_2\), \(H_3\) und \(H_4\) sei ein regelmäßiges Tetraeder mit Kantenlänge \(a\) und Mittelpunkt \(C\) gegeben. Bestimmen Sie mithilfe der (ebenen) Geometrie den Tetraederwinkel \(\varphi\), der gegeben ist als der Innenwinkel am Punkt \(C\) in dem durch \(H_1\), \(H_2\) und \(C\) bestimmten Dreieck. Gehen Sie dazu wie folgt vor.</p>
<hr>
<p style="text-align: justify;">Die folgende Abbildung zeigt das oben beschriebene Tetraeder mit den in den weiteren Aufgabenteilen definierten Hilfslinien und -punkten. </p>
<p style="text-align: justify;">
[[jsxgraph width="380px" height="380px"]]
const board = JXG.JSXGraph.initBoard(divid, {
  boundingbox: [-1.9, 1.9, 1.9, -1.9],
  axis: false,
  showCopyright: false,
  keepaspectratio: true,
  showNavigation: false,
  fixed: true
});

/* ---- colors ---- */

const Color1 = `hsl(${223}, ${100}%, ${70}%)`; /* #648FFF */
const Color2 = `hsl(${251}, ${83}%, ${65}%)`; /* #785EF0 */
const Color3 = `hsl(${331}, ${72}%, ${51}%)`; /* #DC267F */
const Color4 = `hsl(${23}, ${100}%, ${50}%)`; /* #FE6100 */
const Color5 = `hsl(${41}, ${100}%, ${50}%)`; /* #FFB000 */

/* —--- ----- ----- */

var SliderRotationX = board.create('slider', [
  [-1.3, -1.75],
  [1.2, -1.75],
  [-1, -0.35, 1]
], {
  withLabel: true,
  highlight: false,
  name: 'az',
  postLabel: ' &pi;'
});
var SliderRotationZ = board.create('slider', [
  [-1.75, -1.3],
  [-1.75, 1.3],
  [0, 0.1, 0.5]
], {
  withLabel: true,
  highlight: false,
  name: 'el',
  postLabel: ' &pi;'
});
var SliderOffSet = board.create('slider', [
  [1.75, -1.3],
  [1.75, 1.3],
  [0, 0, 1]
], {
  withLabel: false,
  highlight: false,
  name: 'ofs',
  visible: false,
});
var SliderOffSetLabel = board.create('text', [1.75, 1.43, function() {
  return "ofs = " + JXG.toFixed(1.4 * SliderOffSet.Value(), 2)
}], {
  anchorX: 'right',
  fixed: true,
  hihightlight: false,
  visible: false
});
var ZoomSlider = board.create('slider', [
  [1.75, -1.3],
  [1.75, 1.3],
  [1, 1, 3]
], {
  withLabel: false,
  highlight: false,
  name: 'zoom',
  visible: true,
});
var ZoomSliderLabel = board.create('text', [1.75, 1.43, function() {
  return "zoom = " + JXG.toFixed(ZoomSlider.Value() * 100, 0) + "%"
}], {
  anchorX: 'right',
  fixed: true,
  hihightlight: false,
  visible: true
});

/* ------------------------------------- */
/* ------------------------------------- */

var XOffset = 0;
var YOffset = 0;
var ZOffset = -0.28525;

/* ------------------------------------- */
/* ------------------------------------- */

var AOP1 = function() {
  return SliderRotationZ.Value() * Math.PI
};
var AOP2 = function() {
  return (SliderRotationX.Value() + 1) * Math.PI
};
var Distance = function(x, y, a, b) {
  return Math.max(Math.abs(x - a), Math.abs(y - b))
};
var DomainTranslation = function() {
  return -0.75 * SliderOffSet.Value()
};
var FunctionValueTranslation = function() {
  return 0.65 * SliderOffSet.Value()
};
var ZoomValue = function() {
  return ZoomSlider.Value() * 1.6
}
var ZoomValueNormalized = function() {
  return (ZoomSlider.Value() - 1) / 2
}
var ThresholdAngleVisibilty = function() {
  return (ZoomValueNormalized() * 0.05 + (1 - ZoomValueNormalized()) * 0.1) - 0.01
};
var AngleArcRadius = function() {
  return 0.2
};
var DomainThickness = 1.0;
var FunctionValueThickness = 1.0;

var ProjectionX = function(x, y, z, a, b) {
  return ZoomValue() * ((-1) * (x + XOffset) * Math.cos(b) - (-1) * (y + YOffset) * Math.sin(b))
};
var ProjectionY = function(x, y, z, a, b) {
  return ZoomValue() * ((-1) * (x + XOffset) * Math.sin(b) * Math.sin(a) + (z + ZOffset) * Math.cos(a) + (-1) * (y + YOffset) * Math.sin(a) * Math.cos(b))
};
var Projection = function(x, y, z, a, b) {
  return [ProjectionX(x, y, z, a, b), ProjectionY(x, y, z, a, b)]
};
var ParamX = function(x, y, a, b) {
  return (-1) * x * Math.cos(b) - (y - DomainTranslation() * Math.cos(a)) * (Math.sin(b) / Math.sin(a))
};
var ParamY = function(x, y, a, b) {
  return x * Math.sin(b) - (y - DomainTranslation() * Math.cos(a)) * (Math.cos(b) / Math.sin(a))
};

/* ------------------------------------- */
/* -------------------------------------*/

var SurfaceX = function(r, x, y) {
  return Math.cos(x) * r * Math.cos(y)
};
var SurfaceY = function(r, x, y) {
  return Math.sin(x) * r * Math.cos(y)
};
var SurfaceZ = function(r, x, y) {
  return r * Math.sin(y)
};

var SurfaceProjectionX = function(r, x, y) {
  return ProjectionX(SurfaceX(r, x, y), SurfaceY(r, x, y), SurfaceZ(r, x, y), AOP1(), AOP2())
};
var SurfaceProjectionY = function(r, x, y) {
  return ProjectionY(SurfaceX(r, x, y), SurfaceY(r, x, y), SurfaceZ(r, x, y), AOP1(), AOP2())
};

var CameraX = function() {
  return SurfaceX(1, -AOP2() + Math.PI / 2, AOP1())
};
var CameraY = function() {
  return SurfaceY(1, -AOP2() + Math.PI / 2, AOP1())
};
var CameraZ = function() {
  return SurfaceZ(1, -AOP2() + Math.PI / 2, AOP1())
};

var ScalarProduct = function(x, y, z, a, b, c) {
  return a * x + b * y + c * z
}
var ScalarProductCam = function(x, y, z) {
  return ScalarProduct(CameraX(), CameraY(), CameraZ(), x, y, z)
}

var ScalarProduct2D = function(x, y, a, b) {
  return a * x + b * y
}
var EuclidNorm2D = function(x, y) {
  return Math.sqrt(x * x + y * y)
}
var Normalize2DX = function(x, y) {
  return x / EuclidNorm2D(x, y)
}
var Normalize2DY = function(x, y) {
  return y / EuclidNorm2D(x, y)
}

var ScalarProductCamNorm2D = function(x, y) {
  return ScalarProduct2D(Normalize2DX(CameraX(), CameraY()), Normalize2DY(CameraX(), CameraY()), Normalize2DX(x, y), Normalize2DY(x, y))
}

/* ------------------------------------- */
/* -------------------------------------*/

/* Molekül */
var H1 = board.create('point', [function() {
  return ProjectionX(1, 0, 0, AOP1(), AOP2())
}, function() {
  return ProjectionY(1, 0, 0, AOP1(), AOP2())
}], {
  showInfobox: false,
  highlight: false,
  color: 'black',
  withLabel: false,
  fixed: true,
  size: 1,
});

var H2 = board.create('point', [function() {
  return ProjectionX(-0.5, 0.866, 0, AOP1(), AOP2())
}, function() {
  return ProjectionY(-0.5, 0.866, 0, AOP1(), AOP2())
}], {
  showInfobox: false,
  highlight: false,
  color: 'black',
  withLabel: false,
  fixed: true,
  size: 1,
});

var H3 = board.create('point', [function() {
  return ProjectionX(-0.5, -0.866, 0, AOP1(), AOP2())
}, function() {
  return ProjectionY(-0.5, -0.866, 0, AOP1(), AOP2())
}], {
  showInfobox: false,
  highlight: false,
  color: 'black',
  withLabel: false,
  fixed: true,
  size: 1,
});

var H4 = board.create('point', [function() {
  return ProjectionX(0, 0, 1.141, AOP1(), AOP2())
}, function() {
  return ProjectionY(0, 0, 1.141, AOP1(), AOP2())
}], {
  showInfobox: false,
  highlight: false,
  color: 'black',
  withLabel: false,
  fixed: true,
  size: 1,
});

var C = board.create('point', [function() {
  return ProjectionX(0, 0, 0.2853, AOP1(), AOP2())
}, function() {
  return ProjectionY(0, 0, 0.2853, AOP1(), AOP2())
}], {
  showInfobox: false,
  highlight: false,
  color: 'black',
  withLabel: false,
  fixed: true,
  size: 1,
});

var CP = board.create('point', [function() {
  return ProjectionX(0, 0, 0, AOP1(), AOP2())
}, function() {
  return ProjectionY(0, 0, 0, AOP1(), AOP2())
}], {
  visible: true,
  showInfobox: false,
  highlight: false,
  color: Color3,
  withLabel: false,
  fixed: true,
  size: 1,
});

board.create('segment', [H1, C], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
});
board.create('segment', [H2, C], {

  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
});
board.create('segment', [H3, C], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
});
board.create('segment', [H4, C], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
});
board.create('segment', [C, CP], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
  dash: 2
});
board.create('segment', [H1, CP], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
  dash: 2
});
board.create('segment', [H2, CP], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
  dash: 2
});
board.create('segment', [H3, CP], {
  strokeColor: 'black',
  highlight: false,
  strokeWidth: 1.2,
  dash: 2
});

/* ------------------------------------- */
/* ------------------------------------- */

/* polygons */
board.create('polygon', [
  H1,
  H2,
  H3
], {
  vertices: {
    visible: false
  },
  borders: {
    visible: true,
    highlight: false,
    strokecolor: 'black',
    strokeWidth: 1.2,
  },
  highlight: false,
  fillcolor: Color2,
  fillopacity: 0.2,
  fixed: true,
  layer: 0,
});

board.create('polygon', [
  H2,
  H3,
  H4
], {
  vertices: {
    visible: false
  },
  borders: {
    visible: true,
    highlight: false,
    strokecolor: 'black',
    strokeWidth: 1.2,
  },
  highlight: false,
  fillcolor: Color4,
  fillopacity: 0.2,
  fixed: true,
  layer: 0,
});

board.create('polygon', [
  H3,
  H4,
  H1
], {
  vertices: {
    visible: false
  },
  borders: {
    visible: true,
    highlight: false,
    strokecolor: 'black',
    strokeWidth: 1.2,
  },
  highlight: false,
  fillcolor: Color1,
  fillopacity: 0.2,
  fixed: true,
  layer: 0,
});

board.create('polygon', [
  H4,
  H1,
  H2
], {
  vertices: {
    visible: false
  },
  borders: {
    visible: true,
    highlight: false,
    strokecolor: 'black',
    strokeWidth: 1.2,
  },
  highlight: false,
  fillcolor: Color5,
  fillopacity: 0.2,
  fixed: true,
  layer: 0,
});

/* ------------------------------------- */

var VisibilitySideA = function(x) {
  return ScalarProductCamNorm2D(0.5, 0.866) > x
};
var VisibilitySideB = function(x) {
  return ScalarProductCamNorm2D(0.5, -0.866) > x
};
var VisibilitySideC = function(x) {
  return ScalarProductCamNorm2D(-1, 0) > x
};


/* angle arcs in xy */
board.create('curve',
  [(t) => ProjectionX(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    (t) => ProjectionY(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    0, 2 / 3 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if ((VisibilitySideA(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
        return true
      } else {
        return false
      }
    },
  }
);
board.create('curve',
  [(t) => ProjectionX(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    (t) => ProjectionY(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    2 / 3 * Math.PI, 4 / 3 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if ((VisibilitySideC(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
        return true
      } else {
        return false
      }
    },
  }
);
board.create('curve',
  [(t) => ProjectionX(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    (t) => ProjectionY(AngleArcRadius() * Math.cos(t), AngleArcRadius() * Math.sin(t), 0, AOP1(), AOP2()),
    4 / 3 * Math.PI, 2 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if ((VisibilitySideB(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
        return true
      } else {
        return false
      }
    },
  }
);

/* ------------------------------------- */

/* angle labels in xy */
var AngleLabel1 = board.create('text', [(t) => ProjectionX((0.5) * AngleArcRadius() * 0.5, (0.866) * AngleArcRadius() * 0.5, 0, AOP1(), AOP2()), (t) => ProjectionY((0.5) * AngleArcRadius() * 0.5, (0.866) * AngleArcRadius() * 0.5, 0, AOP1(), AOP2()), "120°"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideA(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  },
});

var AngleLabel2 = board.create('text', [(t) => ProjectionX((0.5) * AngleArcRadius() * 0.5, (-0.866) * AngleArcRadius() * 0.5, 0, AOP1(), AOP2()), (t) => ProjectionY((0.5) * AngleArcRadius() * 0.5, (-0.866) * AngleArcRadius() * 0.5, 0, AOP1(), AOP2()), "120°"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  },
});

var AngleLabel3 = board.create('text', [(t) => ProjectionX((-1) * AngleArcRadius() * 0.5, 0, 0, AOP1(), AOP2()), (t) => ProjectionY((-1) * AngleArcRadius() * 0.5, 0, 0, AOP1(), AOP2()), "120°"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true
});

AngleLabel1.setAttribute({
  visible: function() {
    if ((VisibilitySideA(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  }
});
AngleLabel2.setAttribute({
  visible: function() {
    if ((VisibilitySideB(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  }
});
AngleLabel3.setAttribute({
  visible: function() {
    if ((VisibilitySideC(-0.136) || SliderRotationZ.Value() > 0.495) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  }
});

/* ------------------------------------- */

/* distorted angle arcs */
board.create('curve',
  [(t) => ProjectionX(
      AngleArcRadius() * (Math.cos(t) * 0.9616 + Math.sin(t) * (-0.1177)),
      AngleArcRadius() * (Math.cos(t) * 0 + Math.sin(t) * 0.9032),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    (t) => ProjectionY(
      AngleArcRadius() * (Math.cos(t) * 0.9616 + Math.sin(t) * (-0.1177)),
      AngleArcRadius() * (Math.cos(t) * 0 + Math.sin(t) * 0.9032),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    0, 0.941 * 2 / 3 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if (VisibilitySideA(-0.136) & SliderRotationZ.Value() < 0.22) {
        return true
      } else {
        return false
      }
    },
  }
);

board.create('curve',
  [(t) => ProjectionX(
      AngleArcRadius() * (Math.cos(t) * (-0.4808) + Math.sin(t) * (-0.7234)),
      AngleArcRadius() * (Math.cos(t) * 0.8328 + Math.sin(t) * (-0.5536)),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    (t) => ProjectionY(
      AngleArcRadius() * (Math.cos(t) * (-0.4808) + Math.sin(t) * (-0.7234)),
      AngleArcRadius() * (Math.cos(t) * 0.8328 + Math.sin(t) * (-0.5536)),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    0, 0.941 * 2 / 3 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if (VisibilitySideC(-0.136) & SliderRotationZ.Value() < 0.22) {
        return true
      } else {
        return false
      }
    },
  },
);

board.create('curve',
  [(t) => ProjectionX(
      AngleArcRadius() * (Math.cos(t) * (-0.4808) + Math.sin(t) * (0.8411)),
      AngleArcRadius() * (Math.cos(t) * (-0.8328) + Math.sin(t) * (-0.3497)),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    (t) => ProjectionY(
      AngleArcRadius() * (Math.cos(t) * (-0.4808) + Math.sin(t) * (0.8411)),
      AngleArcRadius() * (Math.cos(t) * (-0.8328) + Math.sin(t) * (-0.3497)),
      AngleArcRadius() * (Math.cos(t) * (-0.2743) + Math.sin(t) * (-0.4127)) + 0.2853, AOP1(), AOP2()),
    0, 0.941 * 2 / 3 * Math.PI
  ], {
    strokeColor: 'black',
    highlight: false,
    strokeWidth: 1.2,
    visible: function() {
      if (VisibilitySideB(-0.136) & SliderRotationZ.Value() < 0.22) {
        return true
      } else {
        return false
      }
    },
  }
);

/* ------------------------------------- */

var DistAngleLabel1 = board.create('text', [() => ProjectionX(
    AngleArcRadius() * 0.5 * (0.4332),
    AngleArcRadius() * 0.5 * (0.7528),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()),
  () => ProjectionY(
    AngleArcRadius() * 0.5 * (0.4332),
    AngleArcRadius() * 0.5 * (0.7528),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()), ' &phi;'
], {
  color: 'black',
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

var DistAngleLabel2 = board.create('text', [() => ProjectionX(
    AngleArcRadius() * 0.5 * (-0.8686),
    AngleArcRadius() * 0.5 * (-0.0013),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()),
  () => ProjectionY(
    AngleArcRadius() * 0.5 * (-0.8686),
    AngleArcRadius() * 0.5 * (-0.0013),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()), ' &phi;'
], {
  color: 'black',
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

var DistAngleLabel3 = board.create('text', [() => ProjectionX(
    AngleArcRadius() * 0.5 * (0.4354),
    AngleArcRadius() * 0.5 * (-0.7516),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()),
  () => ProjectionY(
    AngleArcRadius() * 0.5 * (0.4354),
    AngleArcRadius() * 0.5 * (-0.7516),
    AngleArcRadius() * 0.5 * (-0.4955) + 0.2853, AOP1(), AOP2()), ' &phi;'
], {
  color: 'black',
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

DistAngleLabel1.setAttribute({
  visible: function() {
    if (VisibilitySideA(-0.136) & SliderRotationZ.Value() < 0.22) {
      return true
    } else {
      return false
    }
  }
});
DistAngleLabel2.setAttribute({
  visible: function() {
    if (VisibilitySideC(-0.136) & SliderRotationZ.Value() < 0.22) {
      return true
    } else {
      return false
    }
  }
});
DistAngleLabel3.setAttribute({
  visible: function() {
    if (VisibilitySideB(-0.136) & SliderRotationZ.Value() < 0.22) {
      return true
    } else {
      return false
    }
  }
});

/* ------------------------------------- */
/* ------------------------------------- */

/*
board.create('text', [0, 1.8, function() {
  return "CAMX  " + JXG.toFixed(CameraX(), 3)
}], {
  anchorX: 'left',
  fixed: true,
  hihightlight: false,
  visible: true
});
board.create('text', [0, 1.7, function() {
  return "CAMY  " + JXG.toFixed(CameraY(), 3)
}], {
  anchorX: 'left',
  fixed: true,
  hihightlight: false,
  visible: true
});
board.create('text', [0, 1.6, function() {
  return "CAMZ  " + JXG.toFixed(CameraZ(), 3)
}], {
  anchorX: 'left',
  fixed: true,
  hihightlight: false,
  visible: true
});
board.create('text', [0, 1.5, function() {
  return "SKP  " + JXG.toFixed(ScalarProductCamNorm2D(0.5,0.866), 3)
}], {
  anchorX: 'left',
  fixed: true,
  hihightlight: false,
  visible: true
});
board.create('text', [0, 1.4, function() {
  return "AT  " + JXG.toFixed(ThresholdAngleVisibilty(), 3)
}], {
  anchorX: 'left',
  fixed: true,
  hihightlight: false,
  visible: true
});

*/
/* ------------------------------------- */
/* ------------------------------------- */

board.create('text', [() => ProjectionX(0, 0, 0.712, AOP1(), AOP2()) + 0.06, () => ProjectionY(0, 0, 0.712, AOP1(), AOP2()), "d"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,

  highlight: false,
  visible: function() {
    if (SliderRotationZ.Value() < 0.46) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0, 0, 0.1417, AOP1(), AOP2()) + 0.06, () => ProjectionY(0, 0, 0.1417, AOP1(), AOP2()), "h"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,

  highlight: false,
  visible: function() {
    if (SliderRotationZ.Value() < 0.46) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0, 0, 1.141+0.07, AOP1(), AOP2()), () => ProjectionY(0, 0, 1.141+0.07, AOP1(), AOP2()), "H_4"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if (SliderRotationZ.Value() < 0.33) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0, 0, 2*0.1417+0.07, AOP1(), AOP2()) + 0.06, () => ProjectionY(0, 0, 2*0.1417+0.07, AOP1(), AOP2()), "C"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if (SliderRotationZ.Value() < 0.46) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0, 0, 0.07, AOP1(), AOP2()) + 0.06, () => ProjectionY(0, 0, 0.07, AOP1(), AOP2()), "M"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  color: Color3,
  visible: function() {
    if (SliderRotationZ.Value() < 0.46) {
      return true
    } else {
      return false
    }
  },
});

/* ------------------------------------- */
/* ------------------------------------- */

var SideBase1 = board.create('text', [() => SurfaceProjectionX(0.575, 1 / 3 * 3.131, -0.02), () => SurfaceProjectionY(0.575, 1 / 3 * 3.131, -0.02), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

SideBase1.setAttribute({
  visible: function() {
    if ((VisibilitySideA(-0.136) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) || SliderRotationZ.Value() > 0.365) {
      return true
    } else {
      return false
    }
  }
});

board.create('text', [() => ProjectionX(-0.25, 0.433, 0.707, AOP1(), AOP2()), () => ProjectionY(-0.25, 0.433, 0.707, AOP1(), AOP2()), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideA(-0.136) || VisibilitySideC(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.25, 0.433, 0.2, AOP1(), AOP2()), () => ProjectionY(-0.25, 0.433, 0.2, AOP1(), AOP2()), "d"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideA(-0.136) || VisibilitySideC(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.5*1.07, 0.866*1.07, -0.04, AOP1(), AOP2()), () => ProjectionY(-0.5*1.07, 0.866*1.07, -0.04, AOP1(), AOP2()), "H_1"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideA(-0.136) || VisibilitySideC(-0.136))) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.25, 0.433, 0.053, AOP1(), AOP2()), () => ProjectionY(-0.25, 0.433, 0.053, AOP1(), AOP2()), "l"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideA(-0.136) || VisibilitySideC(-0.136)) & SliderRotationZ.Value() < 0.365 & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  },
});


/* ------------------------------------- */
/* ------------------------------------- */

var SideBase2 = board.create('text', [(t) => SurfaceProjectionX(0.575, 3.131, -0.02), (t) => SurfaceProjectionY(0.575, 3.131, -0.02), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

SideBase2.setAttribute({
  visible: function() {
    if ((VisibilitySideC(-0.136) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) || SliderRotationZ.Value() > 0.365) {
      return true
    } else {
      return false
    }
  }
});

board.create('text', [() => ProjectionX(-0.25, -0.433, 0.707, AOP1(), AOP2()), () => ProjectionY(-0.25, -0.433, 0.707, AOP1(), AOP2()), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideC(-0.136) || VisibilitySideB(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.25, -0.433, 0.2, AOP1(), AOP2()), () => ProjectionY(-0.25, -0.433, 0.2, AOP1(), AOP2()), "d"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideC(-0.136) || VisibilitySideB(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.5*1.07, -0.866*1.07, -0.04, AOP1(), AOP2()), () => ProjectionY(-0.5*1.07, -0.866*1.07, -0.04, AOP1(), AOP2()), "H_2"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || VisibilitySideC(-0.136))) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(-0.25, -0.433, 0.053, AOP1(), AOP2()), () => ProjectionY(-0.25, -0.433, 0.053, AOP1(), AOP2()), "l"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideC(-0.136) || VisibilitySideB(-0.136)) & SliderRotationZ.Value() < 0.365 & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  },
});


/* ------------------------------------- */
/* ------------------------------------- */

var SideBase3 = board.create('text', [(t) => SurfaceProjectionX(0.575, (-1 / 3) * 3.131, -0.02), (t) => SurfaceProjectionY(0.575, (-1 / 3) * 3.131, -0.02), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: true,
});

SideBase3.setAttribute({
  visible: function() {
    if ((VisibilitySideB(-0.136) & SliderRotationZ.Value() > ThresholdAngleVisibilty()) || SliderRotationZ.Value() > 0.365) {
      return true
    } else {
      return false
    }
  }
});

board.create('text', [() => ProjectionX(0.5, 0, 0.707, AOP1(), AOP2()), () => ProjectionY(0.5, 0, 0.707, AOP1(), AOP2()), "a"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || VisibilitySideA(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0.5, 0, 0.2, AOP1(), AOP2()), () => ProjectionY(0.5, 0, 0.2, AOP1(), AOP2()), "d"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || VisibilitySideA(-0.136)) & SliderRotationZ.Value() < 0.365) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(1.07, 0, -0.04, AOP1(), AOP2()), () => ProjectionY(1.07, 0, -0.04, AOP1(), AOP2()), "H_3"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || VisibilitySideA(-0.136))) {
      return true
    } else {
      return false
    }
  },
});

board.create('text', [() => ProjectionX(0.5, 0, 0.053, AOP1(), AOP2()), () => ProjectionY(0.5, 0, 0.053, AOP1(), AOP2()), "l"], {
  anchorX: 'middle',
  anchorY: 'middle',
  fontSize: 12,
  highlight: false,
  visible: function() {
    if ((VisibilitySideB(-0.136) || VisibilitySideA(-0.136)) & SliderRotationZ.Value() < 0.365 & SliderRotationZ.Value() > ThresholdAngleVisibilty()) {
      return true
    } else {
      return false
    }
  },
});

/* ------------------------------------- */
/* ------------------------------------- */
[[/jsxgraph]]
</p>

<hr>
<p style="text-align: justify;">(a) Der Schnittpunkt der Geraden durch \(H_4\) und \(C\) mit der durch die Punkte \(H_1\), \(H_2\) und \(H_3\) verlaufenden Ebene werde mit \(M\) bezeichnet. Sei \(l\) die Länge des 
von \(H_1\) nach \(M\) verlaufenden Geradensegments. Bestimmen Sie \(l^2\) in Abhängigkeit von \(a\).</p>
<p style="text-align: justify;">Es ist \(l^2 = \,\) [[input:ans1]].</p>
<p style="text-align: justify;">[[validation:ans1]]</p>
<p style="text-align: justify;">[[feedback:prt1]]</p>
<hr>
<p style="text-align: justify;">(b) Sei \(d\) die Länge des von \(C\) nach \(H_4\) verlaufenden Geradensegments und sei \(h\) die Länge des von \(M\) nach \(C\) verlaufenden Geradensegments. Das von  \(M\) nach \(H_4\) verlaufende Geradensegment hat die Länge \(H : = d+h\). Bestimmen Sie \(H^2\) in Abhängigkeit von \(a\).</p>
<p style="text-align: justify;">Es ist \(H^2 = \,\) [[input:ans2]].</p>
<p style="text-align: justify;">[[validation:ans2]]</p>
<p style="text-align: justify;">[[feedback:prt2]]</p>
<hr>
<p style="text-align: justify;">(c) Bestimmen Sie \(d\) in Abhängigkeit von \(a\).</p>
<p style="text-align: justify;">Es ist \(d^2 = \,\) [[input:ans3]].</p>
<p style="text-align: justify;">[[validation:ans3]]</p>
<p style="text-align: justify;">[[feedback:prt3]]</p>
<hr>
<p style="text-align: justify;">(d) Bestimmen Sie \(\cos(\varphi)\) in Abhängigkeit von \(a\).</p>
<p style="text-align: justify;">Es ist \(\cos(\varphi) = \,\) [[input:ans4]].</p>
<p style="text-align: justify;">[[validation:ans4]]</p>
<p style="text-align: justify;">[[feedback:prt4]]</p>
<hr>
<p style="text-align: justify;">(e) Berechnen Sie \(\varphi\) Sie und geben Sie  \(\varphi\) in Gradmaß bis auf \({@DecNum@}\) Nachkommastellen genau an.</p>
<p style="text-align: justify;">Es ist \(\varphi = \,\) [[input:ans5]]°.</p>
<p style="text-align: justify;">[[validation:ans5]]</p>
<p style="text-align: justify;">[[feedback:prt5]]</p>
<hr>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p style="text-align: justify;">zu (a) Betrachten Sie das gleichseitige Dreieck bestehend aus den Punkten \(H_1\), \(H_2\) und \(M\). Mithilfe des Kosinussatzes
<p style="text-align: justify; margin-left: 30px">
\(a^2 = 2 l^2 - 2 l^2 \cos\left(\frac{2}{3} \pi \right)\)
</p>
<p style="text-align: justify;">lässt sich \(l^2\) bestimmen zu
<p style="text-align: justify; margin-left: 30px">
\(l^2 = {@TeacherAnswerA@}\).
</p>
<hr>
<p style="text-align: justify;">zu (b) Betrachten Sie rechtwinklige Dreieck bestehend aus den Punkten \(H_1\), \(M\) und \(H_4\). Mithilfe des Satzes von Pythagoras
<p style="text-align: justify; margin-left: 30px">
\(a^2 = l^2 + H^2\)
</p>
<p style="text-align: justify;">lässt sich \(H^2\) bestimmen zu
<p style="text-align: justify; margin-left: 30px">
\(H^2 = {@TeacherAnswerB@}\).
</p>
<hr>
<p style="text-align: justify;">zu (c) Betrachten Sie rechtwinklige Dreieck bestehend aus den Punkten \(H_1\), \(M\) und \(C\). Gemäß dem Satz von Pythagoras gilt
<p style="text-align: justify; margin-left: 30px">
\(d^2 = l^2 + h^2\).
</p>
<p style="text-align: justify;">Diese Gleichung lässt sich mithilfe der binomischen Formeln zu
<p style="text-align: justify; margin-left: 30px">
\( (d+h) \, (d-h) = d^2 - h^2 = l^2\)
</p>
<p style="text-align: justify;">umstellen. Daraus folgt schließlich
<p style="text-align: justify; margin-left: 30px">
\( 2d = (d-h) + (d+h)  =  \frac{l^2}{H} + H\)
</p>
und damit
<p style="text-align: justify; margin-left: 30px">
\( d^2 = {@TeacherAnswerC@}\).
</p>
<hr>
<p style="text-align: justify;">zu (d) Betrachten Sie das gleichseitige Dreieck bestehend aus den Punkten \(H_1\), \(H_2\) und \(C\). Mithilfe des Kosinussatzes
<p style="text-align: justify; margin-left: 30px">
\(a^2 = 2 d^2 - 2 d^2 \cos\left( \varphi \right)\)
</p>
<p style="text-align: justify;">lässt sich \(\cos(\varphi)\) bestimmen zu
<p style="text-align: justify; margin-left: 30px">
\(\cos(\varphi) = {@TeacherAnswerD@}\).
</p>
<hr>
<p style="text-align: justify;">zu (e) Anwenden der Inversen der Kosinusfunktion auf \(\cos(\varphi)\) erlaubt es, \(\varphi\) in Gradmaß bis auf \({@DecNum@}\) Nachkommastellen genau anzugeben. Es ist
<p style="text-align: justify; margin-left: 30px">
\(\varphi = {@TeacherAnswerE@}\).
</p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.0000000</penalty>
    <hidden>0</hidden>
    <idnumber></idnumber>
    <stackversion>
      <text>2023010400</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[/*
  Tetraeder

  wurde entwickelt von
 
    Benjamin Herbert Schulz-Rosenberger <benjamin.schulz-c95[at]ruhr-uni-bochum.de>

  nach einer Idee von
 
    Eva Glasmachers <eva.glasmachers[at]ruhr-uni-bochum.de>

  an der Ruhr-Universität Bochum.

  Dieses Werk ist lizenziert unter einer Creative Commons
  Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International
  Lizenz. Um eine Kopie der Lizenz zu erhalten, besuchen Sie
  http://creativecommons.org/licenses/by-sa/4.0/.

  SPDX-License-Identifier: CC-BY-SA-4.0

*/

/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */
/* ------------------------------------------------------------ */

/* Definition */
assume( a > 0);
assume( l > 0);
assume( h > 0);
assume( H > 0);
assume( d > 0);
H = l + h;

DecNum : rand(3)+4; /* Anzahl der Nachkommastellen */

/* Antworten */
TeacherAnswerA : (1/3)*a^2;
TeacherAnswerB : (2/3)*a^2;
TeacherAnswerC : (1/4)*(3/2)*a^2;
TeacherAnswerD : -1/3;
DistortedAngle: float(acos(TeacherAnswerD)*(360/(2*%pi)));
TeacherAnswerE : decimalplaces(DistortedAngle, DecNum);

/* Leere Antwort */
NoAnswer : EMPTYANSWER;]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text></text>
    </specificfeedback>
    <questionnote>
      <text>DecNum : rand(3)+4; /* Anzahl der Nachkommastellen */</text>
    </questionnote>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text></text>
    </prtincorrect>
    <multiplicationsign>none</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>(</matrixparens>
    <variantsselectionseed></variantsselectionseed>
    <input>
      <name>ans1</name>
      <type>algebraic</type>
      <tans>TeacherAnswerA</tans>
      <boxsize>12</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>1</mustverify>
      <showvalidation>3</showvalidation>
      <options></options>
    </input>
    <input>
      <name>ans2</name>
      <type>algebraic</type>
      <tans>TeacherAnswerB</tans>
      <boxsize>12</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>1</mustverify>
      <showvalidation>3</showvalidation>
      <options></options>
    </input>
    <input>
      <name>ans3</name>
      <type>algebraic</type>
      <tans>TeacherAnswerC</tans>
      <boxsize>12</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>1</mustverify>
      <showvalidation>3</showvalidation>
      <options></options>
    </input>
    <input>
      <name>ans4</name>
      <type>algebraic</type>
      <tans>TeacherAnswerD</tans>
      <boxsize>12</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>1</mustverify>
      <showvalidation>3</showvalidation>
      <options></options>
    </input>
    <input>
      <name>ans5</name>
      <type>algebraic</type>
      <tans>TeacherAnswerE</tans>
      <boxsize>12</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>1</mustverify>
      <showvalidation>3</showvalidation>
      <options></options>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text><![CDATA[StudentAnswerValue : is(ans1 = TeacherAnswerA);
StudentAnswerControl : not(is(sconcat(StudentAnswerValue)="unknown"));]]></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>StudentAnswerControl</sans>
        <tans>true</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>0</truescore>
        <truepenalty></truepenalty>
        <truenextnode>1</truenextnode>
        <trueanswernote>prt1-1-T</trueanswernote>
        <truefeedback format="html">
          <text></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (a) Entweder erfüllt Ihre Antwort die geforderten Bedingungen im Allgemeinen nicht oder Ihre Antwort kann aufgrund hoher Komplexität vom System nicht verarbeitet werden.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (a) ist insofern falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
      <node>
        <name>1</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans1</sans>
        <tans>TeacherAnswerA</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt1-2-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (a) Sie haben \(l^2 \) korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (a) ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-2-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (a) Sie haben \(l^2 \) nicht korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (a) ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <prt>
      <name>prt2</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text><![CDATA[StudentAnswerValue : is(ans2 = TeacherAnswerB);
StudentAnswerControl : not(is(sconcat(StudentAnswerValue)="unknown"));]]></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>StudentAnswerControl</sans>
        <tans>true</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>0</truescore>
        <truepenalty></truepenalty>
        <truenextnode>1</truenextnode>
        <trueanswernote>prt4-1-T</trueanswernote>
        <truefeedback format="html">
          <text></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt4-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (b) Entweder erfüllt Ihre Antwort die geforderten Bedingungen im Allgemeinen nicht oder Ihre Antwort kann aufgrund hoher Komplexität vom System nicht verarbeitet werden.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (b) ist insofern falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
      <node>
        <name>1</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans2</sans>
        <tans>TeacherAnswerB</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt2-2-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (b) Sie haben \(H^2 \) korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (b) ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>-</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt2-2-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (b) Sie haben \(H^2 \) nicht korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (b) ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <prt>
      <name>prt3</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text><![CDATA[StudentAnswerValue : is(ans3 = TeacherAnswerC);
StudentAnswerControl : not(is(sconcat(StudentAnswerValue)="unknown"));]]></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>StudentAnswerControl</sans>
        <tans>true</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>0</truescore>
        <truepenalty></truepenalty>
        <truenextnode>1</truenextnode>
        <trueanswernote>prt5-1-T</trueanswernote>
        <truefeedback format="html">
          <text></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt5-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (c) Entweder erfüllt Ihre Antwort die geforderten Bedingungen im Allgemeinen nicht oder Ihre Antwort kann aufgrund hoher Komplexität vom System nicht verarbeitet werden.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (c) ist insofern falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
      <node>
        <name>1</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans3</sans>
        <tans>TeacherAnswerC</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt3-2-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (c) Sie haben \(d^2 \) korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (c) ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt3-2-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (c) Sie haben \(d^2 \) nicht korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (c) ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <prt>
      <name>prt4</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text><![CDATA[StudentAnswerValue : is(ans4 = TeacherAnswerD);
StudentAnswerControl : not(is(sconcat(StudentAnswerValue)="unknown"));]]></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>StudentAnswerControl</sans>
        <tans>true</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>0</truescore>
        <truepenalty></truepenalty>
        <truenextnode>1</truenextnode>
        <trueanswernote>prt2-2-T</trueanswernote>
        <truefeedback format="html">
          <text></text>
        </truefeedback>
        <falsescoremode>-</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt2-2-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (d) Entweder erfüllt Ihre Antwort die geforderten Bedingungen im Allgemeinen nicht oder Ihre Antwort kann aufgrund hoher Komplexität vom System nicht verarbeitet werden.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (d) ist insofern falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
      <node>
        <name>1</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans4</sans>
        <tans>TeacherAnswerD</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt2-1-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (d) Sie haben \(\cos(\varphi)\) korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (d) ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt2-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (d) Sie haben \(\cos(\varphi)\) nicht korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (d) ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <prt>
      <name>prt5</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text><![CDATA[StudentAnswerValue : is(ans5 = TeacherAnswerE);
StudentAnswerControl : not(is(sconcat(StudentAnswerValue)="unknown"));
AcceptedError : (1/10)^(DecNum)]]></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>StudentAnswerControl</sans>
        <tans>true</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>=</truescoremode>
        <truescore>0</truescore>
        <truepenalty></truepenalty>
        <truenextnode>1</truenextnode>
        <trueanswernote>prt5-1-T</trueanswernote>
        <truefeedback format="html">
          <text></text>
        </truefeedback>
        <falsescoremode>=</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt5-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (e) Entweder erfüllt Ihre Antwort die geforderten Bedingungen im Allgemeinen nicht oder Ihre Antwort kann aufgrund hoher Komplexität vom System nicht verarbeitet werden.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (e) ist insofern falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
      <node>
        <name>1</name>
        <answertest>NumDecPlaces</answertest>
        <sans>ans5</sans>
        <tans>DistortedAngle</tans>
        <testoptions>DecNum</testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt5-2-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (e) Sie haben \(\varphi\) korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (e) ist richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>2</falsenextnode>
        <falseanswernote>prt5-2-F</falseanswernote>
        <falsefeedback format="html">
          <text></text>
        </falsefeedback>
      </node>
      <node>
        <name>2</name>
        <answertest>NumAbsolute</answertest>
        <sans>ans5</sans>
        <tans>DistortedAngle</tans>
        <testoptions>AcceptedError</testoptions>
        <quiet>1</quiet>
        <truescoremode>+</truescoremode>
        <truescore>0.5</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt5-3-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (e) Sie haben \(\varphi\) korrekt berechnet, aber nicht bis auf \({@DecNum@}\) Nachkommastellen genau angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (e) ist teilweise richtig.</strong></p>]]></text>
        </truefeedback>
        <falsescoremode>+</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt5-3-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p style="text-align: justify;">zu (e) Sie haben \(\varphi\) nicht korrekt angegeben.</p>
<p style="text-align: justify;"><strong>Ihre Antwort zu (e) ist falsch.</strong></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <qtest>
      <testcase>1</testcase>
      <testinput>
        <name>ans1</name>
        <value>DifferentialX</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>DifferentialY</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>DifferentialZ</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value>FunctionalDeterminant</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-6-T</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-6-T</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt3-6-T</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore>1.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-1-T</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>2</testcase>
      <testinput>
        <name>ans1</name>
        <value>[DifferentialX[1]+1,DifferentialX[2]+1,DifferentialX[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>[DifferentialY[1]+1,DifferentialY[2]+1,DifferentialY[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>[DifferentialZ[1]+1,DifferentialZ[2]+1,DifferentialZ[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value>FunctionalDeterminant+1</value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-4-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-4-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt3-4-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-1-F</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>3</testcase>
      <testinput>
        <name>ans1</name>
        <value>[DifferentialX[1],DifferentialX[2],DifferentialX[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>[DifferentialY[1],DifferentialY[2],DifferentialY[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>[DifferentialZ[1],DifferentialZ[2],DifferentialZ[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value></value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.6600000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-6-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>0.6600000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-6-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>0.6600000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt3-6-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore></expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>NULL</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>4</testcase>
      <testinput>
        <name>ans1</name>
        <value>[DifferentialX[1],DifferentialX[2]+1,DifferentialX[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>[DifferentialY[1],DifferentialY[2]+1,DifferentialY[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>[DifferentialZ[1],DifferentialZ[2]+1,DifferentialZ[3]+1]</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value></value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.3300000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-5-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>0.3300000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-5-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>0.3300000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt3-5-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore></expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>NULL</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>5</testcase>
      <testinput>
        <name>ans1</name>
        <value>1</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>1</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>1</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value></value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-1-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt4-1-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt5-1-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore></expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>NULL</expectedanswernote>
      </expected>
    </qtest>
    <qtest>
      <testcase>6</testcase>
      <testinput>
        <name>ans1</name>
        <value>[0,0]</value>
      </testinput>
      <testinput>
        <name>ans2</name>
        <value>[0,0]</value>
      </testinput>
      <testinput>
        <name>ans3</name>
        <value>[0,0]</value>
      </testinput>
      <testinput>
        <name>ans4</name>
        <value></value>
      </testinput>
      <expected>
        <name>prt1</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt1-2-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt2</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt2-2-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt3</name>
        <expectedscore>0.0000000</expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>prt3-2-F</expectedanswernote>
      </expected>
      <expected>
        <name>prt4</name>
        <expectedscore></expectedscore>
        <expectedpenalty></expectedpenalty>
        <expectedanswernote>NULL</expectedanswernote>
      </expected>
    </qtest>
    <tags>
      <tag><text>tetraeder</text>
</tag>
      <tag><text>Trigonometrie</text>
</tag>
      <tag><text>Geometrie</text>
</tag>
    </tags>
  </question>

<!-- question: 966296  -->
  <question type="stack">
    <name>
      <text>Trigonometrie und Dreiecke (1)</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p style="text-align: justify;">Ein rechtwinkliges Dreieck \(ABC\) sei mit folgenden Informationen gegeben:<br></p>
<p style="text-align: justify;margin-left:30px"> \( a = {@a@} \text{ cm}\), \(b ={@b@} \text{ cm}\), \(c ={@c@} \text{ cm}\) und \(\alpha = {@angle@}°\) im Punkt \(A\). </p>
<hr>
<p style="text-align: justify;">Entscheiden Sie, ob es solch ein Dreieck \(ABC\) geben kann.&nbsp;</p><p style="text-align: justify;">[[input:ans1]]</p>
<p>[[validation:ans1]]</p>
<p>[[feedback:prt1]]</p>
<hr>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p style="text-align: justify;">Ein solches Dreieck existiert{@existence@}. Zeichnet man das Dreieck nach dem Kogruenzsatz \(SSS\) mit den gegebenen Seitenlängen ein oder stellt mithilfe von Pythagoras sicher, dass \(a^2 + b^2 = c^2\) gilt, so muss man lediglich prüfen, ob der eingeschlossene Winkel&nbsp;</p>
<p style="text-align: justify;margin-left:30px">\(\alpha = \angle BAC\)&nbsp;</p>
<p style="text-align: justify;">die geforderte Bedingung erfüllt. Es ist </p>
<p style="text-align: justify;margin-left:30px">\( \displaystyle \sin(\alpha) = \dfrac{a}{c} = \frac{{@a@}}{{@c@}} = {@quotient@} \implies \alpha = {@alpha@}°\).</p>
<p style="text-align: justify;">Also existiert das Dreieck \(ABC\) mit den angegeben Informationen{@existence@}.</p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.1000000</penalty>
    <hidden>0</hidden>
    <idnumber></idnumber>
    <stackversion>
      <text>2023010400</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[/*
  Trigonometrie und Dreiecke (1)

  wurde entwickelt von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  nach einer Idee von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  an der Universität Duisburg-Essen.

  Dieses Werk ist lizenziert unter einer Creative Commons
  Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International
  Lizenz. Um eine Kopie der Lizenz zu erhalten, besuchen Sie
  http://creativecommons.org/licenses/by-sa/4.0/.

  SPDX-License-Identifier: CC-BY-SA-4.0

*/
numer: true
k: rand(2)
alpha: rand(55) + 25
alphaRad: alpha/360 * 2 * pi

angle: k * alpha + (1 - k) * (80 - alpha)



a: rand(10) + 1
c: decimalplaces(a / sin(alphaRad), 2)
b: decimalplaces(sqrt(c^2 - a^2), 2) 
quotient: decimalplaces(a/c, 8)

/* Musterlösung */
ta1: if k = 1 then [[1 , true, "Ja, das Dreieck ABC gibt es."], [2 , false, "Nein, das Dreieck ABC gibt es nicht."]] else [[2 , false, "Ja, das Dreieck ABC gibt es."],[1 , true, "Nein, das Dreieck ABC gibt es nicht."]];
existence: if k = 1 then "" else " nicht";
]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text></text>
    </specificfeedback>
    <questionnote>
      <text>ta1 -- {@a@} -- {@b@} -- {@c@} -- {@alpha@}</text>
    </questionnote>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text></text>
    </prtincorrect>
    <multiplicationsign>dot</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>(</matrixparens>
    <variantsselectionseed></variantsselectionseed>
    <input>
      <name>ans1</name>
      <type>dropdown</type>
      <tans>ta1</tans>
      <boxsize>10</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>0</mustverify>
      <showvalidation>0</showvalidation>
      <options></options>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans1</sans>
        <tans>1</tans>
        <testoptions></testoptions>
        <quiet>0</quiet>
        <truescoremode>=</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt1-1-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist richtig.</strong><br></p>]]></text>
        </truefeedback>
        <falsescoremode>=</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist falsch.</strong><br></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <tags>
      <tag><text>dreieck</text>
</tag>
      <tag><text>Sinus</text>
</tag>
      <tag><text>Anwendung</text>
</tag>
      <tag><text>Geometrie</text>
</tag>
      <tag><text>Trigonometrie</text>
</tag>
    </tags>
  </question>

<!-- question: 966297  -->
  <question type="stack">
    <name>
      <text>Trigonometrie und Dreiecke (2)</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p style="text-align: justify;">Gegeben sei ein Dreieck \(ABC\) mit den Seitenlängen</p>
<p style="text-align: justify;margin-left: 30px"> \( b = {@b@}\) cm, \( c = {@c@} \) cm&nbsp;</p>
<p style="text-align: justify;">und dem Winkel&nbsp;</p>
<p style="text-align: justify;margin-left: 30px">\( \gamma = 90°\) <br></p>
<p style="text-align: justify;">im Punkt \(C\).</p>
<hr>
<p style="text-align: justify;">Berechnen Sie den zugehörigen Winkel \(\alpha\) im Punkt \(A\). Geben Sie das Ergebnis als Gradmaß an und runden Sie auf zwei Nachkommastellen.</p>
<p style="text-align: justify;">Es ist \( \alpha \approx\;&nbsp; \) [[input:ans1]] \(° \).<br></p>
<p> [[validation:ans1]]</p>
<p>[[feedback:prt1]]</p>
<hr>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p style="text-align: justify;">Es handelt sich um ein rechtwinkliges Dreick \(ABC\) mit rechtem Winkel im Eckpunkt \(C\). Nach der Sichtweise muss von \(\alpha\) aus gesehen die Ankathete die Seite \(b\) sein, entsprechend muss \(a\) die Gegenkathete sein. Damit folgt</p>
<p style="text-align: justify;margin-left: 30px"> \(\cos(\alpha) = \displaystyle \frac{b}{c} = \frac{ {@b@} }{ {@c@} }\),&nbsp;</p>
<p style="text-align: justify;x">d.h. es ist&nbsp;</p>
<p style="text-align: justify;margin-left: 30px">\(\alpha = \arccos \left(\dfrac{ {@b@} }{ {@c@} } \right) = {@alpha@} \ldots°\).</p>
<p style="text-align: justify;">Auf 2 Nachkommastellen gerundet, gilt dann&nbsp;</p>
<p style="text-align: justify;margin-left: 30px">\( \alpha \approx {@ta1@}°.\)</p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.1000000</penalty>
    <hidden>0</hidden>
    <idnumber></idnumber>
    <stackversion>
      <text>2023010400</text>
    </stackversion>
    <questionvariables>
      <text><![CDATA[/*
  Trigonometrie und Dreiecke (2)

  wurde entwickelt von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  nach einer Idee von
 
    Tim Inoue <tim.inoue[at]uni-due.de>

  an der Universität Duisburg-Essen.

  Dieses Werk ist lizenziert unter einer Creative Commons
  Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International
  Lizenz. Um eine Kopie der Lizenz zu erhalten, besuchen Sie
  http://creativecommons.org/licenses/by-sa/4.0/.

  SPDX-License-Identifier: CC-BY-SA-4.0

*/
numer: true;
fpprintprec: 7; 

b: rand(5)+1
c: rand(2)+1+b

alpha: acos(b/c)*180/pi
alphaRounded: decimalplaces(alpha, 2)

ta1: alphaRounded]]></text>
    </questionvariables>
    <specificfeedback format="html">
      <text></text>
    </specificfeedback>
    <questionnote>
      <text>randomisierte Seitenlängen</text>
    </questionnote>
    <questionsimplify>1</questionsimplify>
    <assumepositive>0</assumepositive>
    <assumereal>0</assumereal>
    <prtcorrect format="html">
      <text></text>
    </prtcorrect>
    <prtpartiallycorrect format="html">
      <text></text>
    </prtpartiallycorrect>
    <prtincorrect format="html">
      <text></text>
    </prtincorrect>
    <multiplicationsign>dot</multiplicationsign>
    <sqrtsign>1</sqrtsign>
    <complexno>i</complexno>
    <inversetrig>cos-1</inversetrig>
    <logicsymbol>lang</logicsymbol>
    <matrixparens>(</matrixparens>
    <variantsselectionseed></variantsselectionseed>
    <input>
      <name>ans1</name>
      <type>algebraic</type>
      <tans>ta1</tans>
      <boxsize>4</boxsize>
      <strictsyntax>1</strictsyntax>
      <insertstars>0</insertstars>
      <syntaxhint></syntaxhint>
      <syntaxattribute>0</syntaxattribute>
      <forbidwords></forbidwords>
      <allowwords></allowwords>
      <forbidfloat>0</forbidfloat>
      <requirelowestterms>0</requirelowestterms>
      <checkanswertype>0</checkanswertype>
      <mustverify>0</mustverify>
      <showvalidation>0</showvalidation>
      <options></options>
    </input>
    <prt>
      <name>prt1</name>
      <value>1.0000000</value>
      <autosimplify>1</autosimplify>
      <feedbackstyle>1</feedbackstyle>
      <feedbackvariables>
        <text></text>
      </feedbackvariables>
      <node>
        <name>0</name>
        <answertest>AlgEquiv</answertest>
        <sans>ans1</sans>
        <tans>ta1</tans>
        <testoptions></testoptions>
        <quiet>1</quiet>
        <truescoremode>=</truescoremode>
        <truescore>1</truescore>
        <truepenalty></truepenalty>
        <truenextnode>-1</truenextnode>
        <trueanswernote>prt1-1-T</trueanswernote>
        <truefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;">Sie haben den Winkel \(\alpha\) korrekt berechnet.</p><p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist richtig.</strong><br></p>]]></text>
        </truefeedback>
        <falsescoremode>=</falsescoremode>
        <falsescore>0</falsescore>
        <falsepenalty></falsepenalty>
        <falsenextnode>-1</falsenextnode>
        <falseanswernote>prt1-1-F</falseanswernote>
        <falsefeedback format="html">
          <text><![CDATA[<p dir="ltr" style="text-align: left;">Sie haben den Winkel \(\alpha\) nicht korrekt berechnet.</p><p dir="ltr" style="text-align: left;"><strong>Ihre Antwort ist falsch.</strong><br></p>]]></text>
        </falsefeedback>
      </node>
    </prt>
    <tags>
      <tag><text>dreieck</text>
</tag>
      <tag><text>Sinus</text>
</tag>
      <tag><text>Anwendung</text>
</tag>
      <tag><text>Trigonometrie</text>
</tag>
      <tag><text>Geometrie</text>
</tag>
    </tags>
  </question>

</quiz>