Anonymous 发表于 2021-9-9 10:58:58

小白求助 想求喷洒区域的大小的程序改怎么写

想用无人机向旱情严重的某个农场喷水。 计划用无人机引爆水袋,向整个农场喷水。
图(a)标明了在指定的农场用水袋喷洒水的区域。 想了解一下这些撒播的领域有多大。
无人机投掷的水袋具有位置和水袋的宽度和高度。 像这样用水袋喷洒的区域中,A是900,B是600,C是1600。 如果把这些都加起来,那就是3100,但是除了B和C重叠的领域100之外,洒水的领域是3000。

[输入输出] 输入显示投掷的水袋的数量,第二行开始显示水袋的位置x,y 和h水袋的宽度w和高度h的信息

wp231957 发表于 2021-9-9 14:43:03

没有输入输出的例子吗,单看文字,看不懂

Anonymous 发表于 2021-9-9 14:53:05

wp231957 发表于 2021-9-9 14:43
没有输入输出的例子吗,单看文字,看不懂

输入和输出的结果是这样的

傻眼貓咪 发表于 2021-9-9 15:04:48

幫你整理範例中的輸入和輸出值吧,我也想學習:
{:5_109:}
題目
第一行:表示輸入顯示投擲的水袋的數量,
第二行開始:顯示水袋的位置 x,y 和水袋的寬度 w 和高度 h 的信息

示例輸入:3
35 65 30 30
75 35 30 20
100 55 40 40輸出:3000

wp231957 发表于 2021-9-9 18:15:47

傻眼貓咪 发表于 2021-9-9 15:04
幫你整理範例中的輸入和輸出值吧,我也想學習:

題目


要是n个矩形都相交,那这个题目难度嗖一下就完了

Anonymous 发表于 2021-9-9 18:41:31

wp231957 发表于 2021-9-9 18:15
要是n个矩形都相交,那这个题目难度嗖一下就完了

请问就是这样输出的话该怎么写呀?

人造人 发表于 2021-9-9 22:57:38

匿名者 发表于 2021-9-9 18:41
请问就是这样输出的话该怎么写呀?

关键是有超过 3 个矩形有公共部分的话,面积怎么算?
下面是 3 个的情况,如果是 4 个,5 个,6 个,。。。
这样面积要怎么算?

傻眼貓咪 发表于 2021-9-10 00:07:27

def overlap(A: list, B: list):
    width = 0
    height = 0
    a, b = (A-A/2, A+A/2), (B-B/2, B+B/2)
    if a < b and a > b:
      if a > b:
            width = b-b
      elif a < b:
            width = a-b
    elif b < a and b > a:
      if b > a:
            width = a-a
      elif b < a:
            width = b-a
    a, b = (A-A/2, A+A/2), (B-B/2, B+B/2)
    if a < b and a > b:
      if a > b:
            height = b-b
      elif a < b:
            height = a-b
    elif b < a and b > a:
      if b > a:
            height = a-a
      elif b < a:
            height = b-a
    return width*height

def main():
    N = int(input("輸入投擲水袋的數量:"))
    area = []
    for n in range(N):
      x, y, w, h = map(int, input("水袋位置 x y,噴灑寬度 w,和高度 h(以空格隔開輸入):").split())
      area.append([(x, y), w, h])
    total = 0
    res = 0
    for i in range(N):
      total += area*area
      for j in range(i+1, N):
            res += overlap(area, area)
    print(f"灑水範圍:{total-res}")

if __name__ == "__main__":
    main()輸入投擲水袋的數量:3
水袋位置 x y,噴灑寬度 w,和高度 h(以空格隔開輸入):35 65 30 30
水袋位置 x y,噴灑寬度 w,和高度 h(以空格隔開輸入):75 35 30 20
水袋位置 x y,噴灑寬度 w,和高度 h(以空格隔開輸入):100 55 40 40
灑水範圍:3000.0

人造人 发表于 2021-9-10 00:13:09

既然不好算,那就不算了,面积为什么非的是 长 x 宽

import numpy as np

class box_t:
    def __init__(self, width, height):
      self.width = width
      self.height = height
      self.data = np.zeros((self.height, self.width))
    def set_rect(self, x, y, width, height):
      for i in range(height):
            for j in range(width):
                self.data = 1
    def get_area(self):
      area = 0
      for y in range(self.height):
            for x in range(self.width):
                area += self.data
      return int(area)

box = box_t(130, 100)
count = int(input())
for _ in range(count):
    x, y, w, h = map(int, input().split())
    x = int(x - (w / 2))
    y = int(y - (h / 2))
    box.set_rect(x, y, w, h)
print(box.get_area())

傻眼貓咪 发表于 2021-9-10 00:27:39

其實問題不難,難是解答代碼麻煩,我想說看看別人怎麼寫,再從中偷學技術/技巧,哪知沒有人寫,所以手癢癢花了十分鐘寫完了
页: [1]
查看完整版本: 小白求助 想求喷洒区域的大小的程序改怎么写