编写一个计算并打印地球上两点的大圆弧距离的Python程序。该程序接收用户的4个输入x1、y1、x2、y2(分别表示地球上两个点的纬度和经度,单位是度)。大圆弧距离计算公式为(单位是英里) 其中R=69.1105英里,1英里=1.609km。请计算所给坐标之间的大圆弧距离,单位是千米。(注意,sin、cos函数输入的是弧度值, 而程序中给的是角度值,需要转换。arccos结果是弧度值,需要转化成角度值)。
时间: 2023-05-29 20:05:49 浏览: 97
```python
import math
x1 = float(input("请输入第一个点的纬度:"))
y1 = float(input("请输入第一个点的经度:"))
x2 = float(input("请输入第二个点的纬度:"))
y2 = float(input("请输入第二个点的经度:"))
R = 69.1105
x1 = math.radians(x1)
y1 = math.radians(y1)
x2 = math.radians(x2)
y2 = math.radians(y2)
d = R * math.acos(math.sin(x1) * math.sin(x2) + math.cos(x1) * math.cos(x2) * math.cos(y1 - y2))
d_km = d * 1.609
print("所给坐标之间的大圆弧距离为:", d_km, "千米")
```
示例输出:
```
请输入第一个点的纬度:39
请输入第一个点的经度:116
请输入第二个点的纬度:40
请输入第二个点的经度:117
所给坐标之间的大圆弧距离为: 183.8053721837037 千米
```
相关问题
Python写一个程序,对图像进行圆弧检测,画出圆弧,并输出圆弧上的10个坐标点
可以使用OpenCV库来实现对图像的圆弧检测和绘制。以下是一个简单的代码示例,用于检测图像中的圆弧并绘制它们:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对图像进行模糊处理
gray_blurred = cv2.blur(gray, (3, 3))
# 使用Hough变换检测圆弧
circles = cv2.HoughCircles(gray_blurred, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
# 绘制圆弧
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 2)
# 输出圆弧上的10个坐标点
for i in range(1, 11):
angle = 2 * np.pi * i / 10
x1 = int(x + r * np.cos(angle))
y1 = int(y + r * np.sin(angle))
cv2.circle(img, (x1, y1), 2, (0, 0, 255), -1)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取图像并将其转换为灰度图像。然后,我们对图像进行模糊处理以减少噪声。接下来,我们使用Hough变换检测圆弧。如果找到了圆弧,我们就使用cv2.circle函数绘制它们,并输出圆弧上的10个坐标点。最后,我们显示绘制了圆弧的图像。
请注意,上面的代码只是一个简单的示例,您可能需要根据实际情况对其进行修改和优化。
用python 的tkinter画一个灰色渐变填充的圆
下面是一个用 Python 的 tkinter 库画一个灰色渐变填充的圆的示例代码:
```python
import tkinter as tk
# 创建一个窗口
root = tk.Tk()
# 创建一个画布
canvas = tk.Canvas(root, width=300, height=300)
canvas.pack()
# 画一个圆
x0, y0, x1, y1 = 50, 50, 250, 250
canvas.create_oval(x0, y0, x1, y1)
# 创建一个灰度渐变填充
for i in range(256):
color = '#{:02x}{:02x}{:02x}'.format(i, i, i)
canvas.create_arc(x0+i, y0+i, x1-i, y1-i, fill=color, outline='')
# 运行窗口
root.mainloop()
```
在上面的代码中,我们首先创建了一个窗口和一个画布。然后我们画了一个圆,接着使用 `create_arc` 方法创建了一个灰度渐变的填充。我们循环遍历了 0 到 255 的灰度值,然后使用 `format` 方法将其转换为十六进制格式的颜色字符串。最后,我们用这个颜色字符串作为填充颜色,画出一个圆弧。
运行上面的代码,你应该可以看到一个灰色渐变填充的圆。