Java绘图:如何精准绘制长度匹配圆周的圆半径?
Fixing Your Circle Radius Line Drawing Issue
Hey there! Let's break down why your line isn't landing perfectly on the circle and fix it up step by step. I spotted a few key issues in your code that are causing the misalignment:
Key Problems in Your Current Code
- Trigonometric functions require radians, not degrees: Java's
Math.cos()andMath.sin()expect input values in radians, but you're passing raw integer angle values (likeangle_xfrom theazimparameter). This completely throws off your coordinate calculations. - Incorrect circle positioning: The
drawOval()method takes the top-left corner of the oval's bounding box as its first two parameters—not the circle's center. Your current code draws a circle with its top-left at (200,100), making the actual center (300,200) instead of the (200,100) you intended. - Wrong line starting point: You're drawing the line from (300,200) instead of the intended center (200,100).
Corrected Code
Here's the fixed version with clear explanations:
import java.awt.*; import java.awt.geom.Line2D; public class SecondActivity extends /* Your parent class, e.g., JFrame */ { private int angle; private final int RADIUS = 100; private double circlePointX, circlePointY; public SecondActivity(String azim, String ele) { initialize(); setTitle("My Window"); angle = Integer.parseInt(azim); // Convert input degree angle to radians for trig calculations double radians = Math.toRadians(angle); // Calculate the exact point on the circle's circumference circlePointX = 200 + RADIUS * Math.cos(radians); circlePointY = 100 + RADIUS * Math.sin(radians); } @Override public void paint(Graphics g) { super.paint(g); drawCircle(g, 200, 100, RADIUS); drawRadiusLine(g); } public void drawCircle(Graphics g, int centerX, int centerY, int radius) { g.setColor(Color.BLACK); // Shift the oval's top-left corner so the center matches our desired (200,100) g.drawOval(centerX - radius, centerY - radius, radius * 2, radius * 2); } public void drawRadiusLine(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.BLUE); // Draw line from the actual center to the calculated circumference point g2d.draw(new Line2D.Double(200.0d, 100.0d, circlePointX, circlePointY)); } // Add your window initialization logic here private void initialize() { setSize(450, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } }
What Changed?
- Radian conversion: Added
Math.toRadians(angle)to translate your input degree values into the radians Java's trigonometric functions require. - Fixed circle center: Adjusted
drawOval()to usecenterX - radiusandcenterY - radiusas the top-left coordinates, ensuring the circle's center aligns with (200,100). - Corrected line start: Updated the line's starting point to the actual center (200,100) instead of the old offset position.
- Consistent radius: Made
RADIUSa constant class variable to avoid mismatched values across methods.
If you intended to use both azim (azimuth) and ele (elevation) for a 3D projection, feel free to clarify—but for a 2D circle, using a single angle to calculate the circumference point works perfectly.
内容的提问来源于stack exchange,提问作者Ashu Ansari
相关产品推荐
相关产品推荐

