// 角度ディスプレイの内容を更新(描画)する関数 // ----- // * 引数 degree: 度数法での角度 void updateDisplay(float degree) { // 度数に対応するラジアンを求める float radian = degreeToRadian(degree); // 円の中心座標や、外接長方形の左上端の位置、サイズなどを求める int circleCenterX = DISPLAY_WIDTH / 2; int circleCenterY = DISPLAY_HEIGHT / 2; int circleLeftTopX = circleCenterX - CIRCLE_RADIUS; int circleLeftTopY = circleCenterY - CIRCLE_RADIUS; int circleSize = CIRCLE_RADIUS * 2; // 円周上の、角度に対応する地点の座標を求める int anglePointX = round(circleCenterX + CIRCLE_RADIUS * cos(radian), 8, HALF_UP); int anglePointY = round(circleCenterY - CIRCLE_RADIUS * sin(radian), 8, HALF_UP); // 現在の描画内容を、白色でクリアする setGraphics2DColor(displayRenderer, WHITE); clearGraphics2D(displayRenderer); // 円を描く setDrawColor(displayRenderer, BLACK); drawEllipse(displayRenderer, circleLeftTopX, circleLeftTopY, circleSize, circleSize, false); // 円の中心から、指定角度の線と、角度 0 の基準線を引く drawLine(displayRenderer, circleCenterX, circleCenterY, circleCenterX + CIRCLE_RADIUS, circleCenterY); drawLine(displayRenderer, circleCenterX, circleCenterY, anglePointX, anglePointY); // 上記の 2 本の線の間を、円弧で繋ぐ(小刻みに線を引いて円弧を描く) float arcR = 40; for (float arcBeginRadian=0.0; arcBeginRadian < radian; arcBeginRadian += 0.03) { float arcEndRadian = arcBeginRadian + 0.03; if (radian < arcEndRadian) { arcEndRadian = radian; } int arcBeginX = round(circleCenterX + arcR * cos(arcBeginRadian), 8, HALF_UP); int arcBeginY = round(circleCenterY - arcR * sin(arcBeginRadian), 8, HALF_UP); int arcEndX = round(circleCenterX + arcR * cos(arcEndRadian), 8, HALF_UP); int arcEndY = round(circleCenterY - arcR * sin(arcEndRadian), 8, HALF_UP); setDrawColor(displayRenderer, BLACK); drawLine(displayRenderer, arcBeginX, arcBeginY, arcEndX, arcEndY); } // 円周上の、指定角度の位置に、赤色の点を描く setDrawColor(displayRenderer, RED); drawPoint(displayRenderer, anglePointX, anglePointY, 5, true); // 円周上の、0、90、180、270度の位置に目盛り数字を描く setDrawColor(displayRenderer, BLACK); setDrawFontSize(displayRenderer, 16); drawText(displayRenderer, circleCenterX + CIRCLE_RADIUS + 10, circleCenterY + 5, "0"); drawText(displayRenderer, circleCenterX - 10, circleCenterY - CIRCLE_RADIUS - 10, "90"); drawText(displayRenderer, circleCenterX - CIRCLE_RADIUS - 40, circleCenterY + 5, "180"); drawText(displayRenderer, circleCenterX - 12, circleCenterY + CIRCLE_RADIUS + 22, "270"); // 角度ディスプレイの表示ラベル、およびウィンドウを再描画 paintComponent(displayLabel); paintComponent(window); }