我必须使用圆圈等式x² + y² = 1
创建一个圆形网格,其中x
和y
从-1
到1
,增加0.1
在每一步中。
我尝试了许多不同的事情,但失败了,所以如果有人能帮助我,我会很高兴。
我的一次尝试是:attempt one
PROGRAM cir
IMPLICIT real*8(a-h, o-z)
real :: x(20,20), py(20,20), ny(20,20)
delx = -1.1
dely = -1.1
DO i=1,20
delx = delx + 0.1
DO j=1.20
x(i,j) = delx
ny(i,j)= -1.0 * SQRT ( 1.0 - ( x(i,j)**2 ) )
py(i,j)= SQRT ( 1.0 - ( x(i,j)**2) )
PRINT*, x(i,j), ny(i,j), py(i,j)
END DO
END DO
STOP
END PROGRAM cir
另一个:attempt two
PROGRAM circle
IMPLICIT real*8(a-h,o-z)
real*8 :: x(20,20), y(20,20), z(20,20)
delx = -1.0
dely = -1.0
DO i = 1, 20
delx = delx + 0.1
DO j = 1 , 20
dely = dely + 0.1
x(i,j) = delx
y(i,j) = dely
z(i,j) = x(i,j)**2 + y(i,j)**2 -1.0
END DO
delx = -1.0
dely = -1.0
PRINT*, x(i,j), y(i,j)
END DO
STOP
END PROGRAM circle
答案 0 :(得分:2)
我们很难理解你想要达到的目标。目前,有两种可能性:
可能性1:您希望在x
和{{1}之间以y
为增量的0.1
和-1.0
值对应的网格告诉我们这个网格点是在半径为1的圆的内部还是外部。
这是一个这样的程序可能是什么样子的例子,它的输出是:
1.0
输出:
program my_circle
implicit none
logical :: cir(-10:10, -10:10)
real :: x, y
integer :: i, j
do i = -10, 10
do j = -10, 10
x = i / 10.0
y = j / 10.0
cir(j, i) = ((x**2 + y**2) <= 1.0)
end do
end do
write(*, '(21A2)') print_cir(cir)
contains
elemental function print_cir(c)
! returns " X" if true, " ." otherwise
implicit none
logical, intent(in) :: c
character(len=2) :: print_cir
if (c) then
print_cir = " X"
else
print_cir = " ."
end if
end function print_cir
end program my_circle
可能性2:您需要一个描述圆圈本身的x / y坐标列表。在这种情况下, . . . . . . . . . . X . . . . . . . . . .
. . . . . . X X X X X X X X X . . . . . .
. . . . X X X X X X X X X X X X X . . . .
. . . X X X X X X X X X X X X X X X . . .
. . X X X X X X X X X X X X X X X X X . .
. . X X X X X X X X X X X X X X X X X . .
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
X X X X X X X X X X X X X X X X X X X X X
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
. X X X X X X X X X X X X X X X X X X X .
. . X X X X X X X X X X X X X X X X X . .
. . X X X X X X X X X X X X X X X X X . .
. . . X X X X X X X X X X X X X X X . . .
. . . . X X X X X X X X X X X X X . . . .
. . . . . . X X X X X X X X X . . . . . .
. . . . . . . . . . X . . . . . . . . . .
的增量没有多大意义,因为每个象限只有3个点在你的网格和圆上:( 1.0 / 0.0),(0.8 / 0.6),和(0.6 / 0.8)。
所以对于这种可能性,我创建了一个小程序,打印出圆圈周围给定数量(当前为36)的点,用三角函数计算x和y:
0.1
输出:
program my_circle2
implicit none
integer, parameter :: num_points = 36
real, parameter :: pi = 4.0 * ATAN(1.0) ! Best way to calculate PI
integer :: i
real :: r
real, dimension(2, num_points) :: cir
do i = 1, num_points
r = 2.0 * pi * real(i) / real(num_points)
cir(1, i) = sin(r)
cir(2, i) = cos(r)
end do
do i = 1, num_points
write(*, '(I5, 3F8.4)') i, cir(:, i), my_dist(cir(:, i))
end do
contains
function my_dist(c)
! Calculates the distance of (c(1)/c(2)) from origin
! for verification
implicit none
real, dimension(2), intent(in) :: c
real :: my_dist
my_dist = sqrt(c(1)**2 + c(2)**2)
end function my_dist
end program my_circle2
这些是你想要的吗?