好的,所以我尝试过去几个小时用ASCII绘制圆圈。我有一组预定的X,Y和Radius。但我不知道如何实施这些中心(H,K)。我设法使用Math.pow()将方程式放在java中,我想使用的等式是(x-h)^ 2 +(y-k)^ 2 = radius ^ 2
这是我到目前为止所做的,如果我使用值h = 11,k = 4,我会得到一个奇怪的形状。
请帮助!
答案 0 :(得分:1)
这样的事情怎么样?
public static void DrawMeACircle(int posX, int posY, int radius)
{
int thickness = 2;
for (int j = 0; j<posY+radius*2 + thickness;j++)
{
for (int i = 0; i<posX+radius*2+thickness; i++)
{
if ( Math.abs(Math.pow(Math.pow(i-posX,2) + Math.pow(j-posY,2),.5) - radius*2) < thickness)
{
System.out.print("#"); // or X ?
}
else
{
System.out.print(" ");
}
//System.out.print("\n");
}
System.out.print("\n");
}
}
x = 16,y = 11,radius = 5和thickness = 2的结果看起来有点像这样
#########
#############
###############
######## ########
###### ######
##### #####
#### ####
##### #####
#### ####
#### ####
#### ####
### ###
#### ####
#### ####
#### ####
##### #####
#### ####
##### #####
###### ######
######## ########
###############
#############
#########
它伸长的事实可能是字体问题......
为了提供一个“单线”圆圈,无论半径和位置如何,我想说唯一的方法是事后编辑它:
public static void DrawMeACircle(int posX, int posY, int radius) {
String [] result = new String [posY+radius*2+1];
for (int j = 0; j<posY+radius*2+1;j++)
{
result[j] = "";
for (int i = 0; i<posX+radius*2+1; i++)
{
float pointDistance = dist(i, j, posX, posY);
if (pointDistance < radius*2)
result[j] +="#"; // or X ?
else
result[j]+=" ";
}
}
boolean wholeLine = true;
for (int j = 0; j < result.length; j++) {
boolean started = false;
if (!wholeLine && j < result.length-1 && !result[j+1].contains("#"))
wholeLine = true;
if (!wholeLine)
for (int i = 0; i < result[j].length()-1; i++) {
if (result[j].charAt(i) != '#') continue;
if (!started)
started = true;
else if (started && result[j].charAt(i+1) != '#') {
}
else
result[j] = result[j].substring(0, i) + " " + result[j].substring(i+1);
}
if(wholeLine && result[j].contains("#")) wholeLine = false;
System.out.println(result[j]);
}
}
static float dist(int x1, int y1, int x2, int y2) {
return (int)Math.abs(Math.pow(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2), .5));
}
哪个(不管你扔什么)都会产生这样的结果:
#######
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
#######
答案 1 :(得分:-1)
我不知道究竟应该如何成为你的输出,所以这是我的尝试。
public static void DrawMeACircle(int posX, int posY, int radius) {
int h = 10; // Initial x position.
int k = 5;
int x = posX - h;
int y = posY - k;
for (int i = 0; i <= 2*posX; i++){
for (int j = 0; j <= 2*posY; j++){
double dx = (x - i);
double dy = (y - j);
if (Math.abs(dx*dx + dy*dy - radius*radius) < 5){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
使用值posX=15, posY=15, radius=5, h=10 and k =5
打印
#####
# #
# #
# #
# #
# #
# #
# #
# #
# #
#####