《python语言程序设计》2018版第8章19题几何Rectangle2D类(下)-头疼的几何和数学

news2024/10/6 2:48:16

在这里插入图片描述

希望这个下集里能有完整的代码

一、containsPoint实现

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

mac系统里似乎不接受我们的驼峰命名,所以这个函数应该是contains_point

在这里插入图片描述

代码段如下,出现的问题0.05后Statement expected, found Py:DEDENT,完又遇到这个哥们了

    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    # 实现另一个矩形的x,y坐标与当前矩形x,y对比
    def contains_points(self, other_x, other_y):
        a_t_valid = other_x - self.__x
        b_t_valid = other_y - self.__y
        a = (pow(a_t_valid, 2) + pow(b_t_valid, 2)) * 0.05


在这里插入图片描述

二、我要解决这个哥哥

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

先从网上找一下Statement expected, found Py:DEDENT

语句预期,发现Py:DEDEN Statement expected, found Py:DEDENT

在这里插入图片描述
AI解释的.我看不懂.估计是阅读恐惧问题.
我想想从里面找找我能看到的地方吧

TAB还是空格呢??

记得有人说.用空格的程序员很宝贵,要比用TAB的宝贵.看来这句话今天可以试试了

在这里插入图片描述

画圈的地方是我用空格键一个个按出来的.而不是用TAB按出来的.

小小总结

看来多用空格按钮

三、如何在矩形中对比

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

圆形我们以半径的长度为x,y的对比.矩形怎么办呢??
我之前已经有个办法了.那么我要去找一下第4章的兄弟帮忙

我调用了24.2第11次做的4.31题的代码

  def count_point_judge(r1x, r1y, r2x, r2y, r3x, r3y):
        judgeLine1 = ((r1x - r2x) * (r3y - r2y)) - ((r3x - r2x) * (r1y - r2y))
        if judgeLine1 < 0:
            print("P2 x{} y{} is on the left side of the line from P0 to P1)".format(r3x, r3y))
        elif judgeLine1 > 0:
            print("P2 x{} y{} is on the right side of the line from P0 to P1)".format(r3x, r3y))
        elif judgeLine1 == 0:
            print("P2 x{} y{} is on the same line from P0 to P1)".format(r3x, r3y))

我似乎看到了希望.但是我发现它是用已知的2个点组成的线段对比另一个已知的点.

四、兜兜转转的我要拆分矩形的四个点

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

本来就是一个偷懒的完成矩形就可以了.但是.但是看来玩要好好的拆分了.

如何拆分矩形的四个点呢.

我们应该利用当前的x,y坐标和长宽来计算四个点的坐标.

# 求得最右边的代码
(x_1 - width_r / 2, height_r / 2 + y_1)

好我们建立一个计算的函数吧

五、计算矩形四个x,y点的con_po登场

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

   def con_po(self):
        rx1, ry1 = self.__x - self.__width / 2, self.__height / 2 + self.__y
        rx2, ry2 = abs(rx1) + self.__width, ry1
        rx3, ry3 = rx2, ry2 - self.__height
        rx4, ry4 =abs(rx1)-self.__height, ry3
        turtle.penup()
        turtle.goto(rx1,ry1)
        turtle.pendown()
        turtle.goto(rx2,ry2)
        turtle.goto(rx3,ry3)
        turtle.goto(rx4,ry4)
        turtle.hideturtle()
        turtle.done()
我们来小小的测试一下这个函数

def main():
    x1, y1, width1, height1 = eval(input("Enter x1,y1,width1,height1: "))
    r1 = Rectangle2D(x1, y1, width1, height1)
    r1.con_po()

main()
结果

在这里插入图片描述
别慌,我们把点标出来.

# 增加一段打印代码来看看这4对坐标的数值
print(f"x1: {rx1}, y1: {ry1}")
print(f"x2: {rx2}, y2: {ry2}")
print(f"x3: {rx3}, y3: {ry3}")
print(f"x4: {rx4}, y4: {ry4}")

以下数据为例.按我的代码计算结果截图
x1, y1, width1, height1 = 9,1.3,10,35.3

在这里插入图片描述

出在哪里呢???

我怀疑是x4的计算上.我们合计一下.

        # 我是不是不应该进行这样的减法
        rx4, ry4 =abs(rx1)-self.__height, ry3

修改完成
 def con_po(self):
        rx1, ry1 = self.__x - self.__width / 2, self.__height / 2 + self.__y
        rx2, ry2 = abs(rx1) + self.__width, ry1
        rx3, ry3 = rx2, ry2 - self.__height
        rx4, ry4 = rx1, ry3
        print(f"x1: {rx1}, y1: {ry1}")
        print(f"x2: {rx2}, y2: {ry2}")
        print(f"x3: {rx3}, y3: {ry3}")
        print(f"x4: {rx4}, y4: {ry4}")
        turtle.penup()
        turtle.goto(rx1, ry1)
        turtle.dot(3, "blue")
        turtle.pendown()
        turtle.goto(rx2, ry2)
        turtle.dot(3, "blue")
        turtle.goto(rx3, ry3)
        turtle.dot(3, "blue")
        turtle.goto(rx4, ry4)
        turtle.dot(3, "blue")
        turtle.goto(rx1, ry1)
        turtle.hideturtle()

在这里插入图片描述
现在我们获得了坐标接下来我们应该如何把con_po融入到contains_points
在这里插入图片描述

variable in function should be lowercase 函数变量应该小写

六、结合后的contains_points

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写


    def contains_points(self,other_x,other_y):
        rx1, ry1 = self.__x - self.__width / 2, self.__height / 2 + self.__y
        rx2, ry2 = abs(rx1) + self.__width, ry1
        rx3, ry3 = rx2, ry2 - self.__height
        rx4, ry4 = rx1, ry3
        judge_line1 = ((rx1 - rx2) * (other_y - ry2)) - ((other_x - rx2) * (ry1 - ry2))
        judge_line2 = ((rx2 - rx3) * (other_y - ry3)) - ((other_x - rx3) * (ry2 - ry3))
        judge_line3 = ((rx3 - rx4) * (other_y - ry4)) - ((other_x - rx4) * (ry3 - ry4))
        judge_line4 = ((rx4 - rx1) * (other_y - ry1)) - ((other_x - rx1) * (ry4 - ry1))

        if judge_line1 > 0 and judge_line2 >0 and judge_line3 >0 and judge_line4 >0:
            print(f" r2 x: {other_x} y: {other_y} is in r1")
        else:
            print(f" r2 x: {other_x} y: {other_y} is not in r1")

七、本题最后的代码

      • 先从网上找一下Statement expected, found Py:DEDENT
      • TAB还是空格呢??
      • 小小总结
      • 如何拆分矩形的四个点呢.
        • 我们来小小的测试一下这个函数
        • 结果
        • 出在哪里呢???
        • 修改完成
        • variable in function should be lowercase 函数变量应该小写

这次偷懒了.就不再分析下面的问题了.但是代码写全了


class Rectangle2D:
    # 初始化当前矩形的信息
    def __init__(self, x, y, width, height):
        self.__x = x
        self.__y = y
        self.__width = width
        self.__height = height

    # 获得当前矩形的面积
    def get_area(self):
        return self.__width * self.__height

    # 获得当前矩形的周长
    def get_perimeter(self):
        return (self.__width + self.__height) * 2

    # 装一下,打印该矩形的x,y和长宽
    def print_text(self, name):
        print(f"Enter x{name}, y{name}, width{name}, height{name}: {self.__x}, {self.__y}, {self.__width},"
              f" {self.__height}")

    # 绘制当前矩形
    def draw_rec1(self):
        turtle.penup()
        turtle.goto(self.__x, self.__y)
        turtle.dot(6, "blue")
        turtle.goto(self.__x - self.__width / 2, self.__height / 2 + self.__y)
        turtle.pendown()
        turtle.forward(self.__width)
        turtle.right(90)
        turtle.forward(self.__height)
        turtle.right(90)
        turtle.forward(self.__width)
        turtle.right(90)
        turtle.forward(self.__height)
        turtle.hideturtle()
        turtle.done()

    # 绘制当前矩形和另一个矩形
    def draw_rec2(self, other_rec):
        x_1 = other_rec.__x
        y_1 = other_rec.__y
        width_r = other_rec.__width
        height_r = other_rec.__height
        turtle.penup()
        turtle.goto(self.__x, self.__y)
        turtle.dot(6, "black")
        turtle.goto(self.__x - self.__width / 2, self.__height / 2 + self.__y)
        turtle.pendown()
        turtle.forward(self.__width)
        turtle.right(90)
        turtle.forward(self.__height)
        turtle.right(90)
        turtle.forward(self.__width)
        turtle.right(90)
        turtle.forward(self.__height)
        turtle.left(270)

        turtle.penup()
        turtle.goto(x_1, y_1)
        turtle.dot(6, "blue")
        turtle.goto(x_1 - width_r / 2, height_r / 2 + y_1)
        turtle.pendown()
        turtle.forward(width_r)
        turtle.right(90)
        turtle.forward(height_r)
        turtle.right(90)
        turtle.forward(width_r)
        turtle.right(90)
        turtle.forward(height_r)
        turtle.hideturtle()
        turtle.done()

    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    # 为了计算4对坐标设计
    def con_po(self):
        rx1, ry1 = self.__x - self.__width / 2, self.__height / 2 + self.__y
        rx2, ry2 = abs(rx1) + self.__width, ry1
        rx3, ry3 = rx2, ry2 - self.__height
        rx4, ry4 = rx1, ry3
        print(f"x1: {rx1}, y1: {ry1}")
        print(f"x2: {rx2}, y2: {ry2}")
        print(f"x3: {rx3}, y3: {ry3}")
        print(f"x4: {rx4}, y4: {ry4}")
        turtle.penup()
        turtle.goto(rx1, ry1)
        turtle.dot(3, "blue")
        turtle.pendown()
        turtle.goto(rx2, ry2)
        turtle.dot(3, "blue")
        turtle.goto(rx3, ry3)
        turtle.dot(3, "blue")
        turtle.goto(rx4, ry4)
        turtle.dot(3, "blue")
        turtle.goto(rx1, ry1)
        turtle.hideturtle()
        turtle.done()

    # 实现另一个矩形的x,y坐标与当前矩形x,y对比
    def contains_points(self, other_x, other_y):
        rx1, ry1 = self.__x - self.__width / 2, self.__height / 2 + self.__y
        rx2, ry2 = abs(rx1) + self.__width, ry1
        rx3, ry3 = rx2, ry2 - self.__height
        rx4, ry4 = rx1, ry3
        judge_line1 = ((rx1 - rx2) * (other_y - ry2)) - ((other_x - rx2) * (ry1 - ry2))
        judge_line2 = ((rx2 - rx3) * (other_y - ry3)) - ((other_x - rx3) * (ry2 - ry3))
        judge_line3 = ((rx3 - rx4) * (other_y - ry4)) - ((other_x - rx4) * (ry3 - ry4))
        judge_line4 = ((rx4 - rx1) * (other_y - ry1)) - ((other_x - rx1) * (ry4 - ry1))

        if judge_line1 > 0 and judge_line2 > 0 and judge_line3 > 0 and judge_line4 > 0:
            print(f"r1 contains the center of r2? True")
        else:
            print(f"r1 contains the center of r2? False")


# 包括面积、周长计算
def main():
    # x1, y1, width1, height1 = eval(input("Enter x1,y1,width1,height1: "))
    # x2, y2, width2, height2 = eval(input("Enter x2,y2,width2,height2: "))
    x1, y1, width1, height1 = 9, 1.3, 10, 35.3
    x2, y2, width2, height2 = 1.3, 4.3, 4, 5.3

    r1 = Rectangle2D(x1, y1, width1, height1)
    r1.print_text(1)
    area_r1 = r1.get_area()
    print(f"Area for r1 is {area_r1}")
    perimeter_r1 = r1.get_perimeter()
    print(f"Perimeter for r1 is {perimeter_r1}")

    r2 = Rectangle2D(x2, y2, width2, height2)
    r2.print_text(2)
    area_r2 = r2.get_area()
    print(f"Area for r2 is {area_r2}")
    perimeter_r2 = r2.get_perimeter()
    print(f"Perimeter for r2 is {perimeter_r2}")

    r1.contains_points(r2.get_x(), r2.get_y())

main()

在这里插入图片描述

明天继续,加油通知们.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

No.2 笔记 | 网络安全攻防:PC、CS工具与移动应用分析

引言 在当今数字化时代,网络安全已成为每个人都应该关注的重要话题。本文将总结一次关于网络安全攻防技术的学习内容,涵盖PC端和移动端的恶意程序利用,以及强大的渗透测试工具Cobalt Strike的使用。通过学习这些内容,我们不仅能够了解攻击者的手法,更能提高自身的安全意识和防…

【牛顿迭代法求极小值】

牛顿迭代法求极小值 仅供参考 作业内容与要求 作业内容 作业要求 递交报告 代码 编程实现 计算偏导数 故上述非线性方程组的根可能为 f ( x , y ) f(x, y) f(x,y)的极值点&#xff0c;至于是极小值点还是极大值点或鞍点&#xff0c;就需要使用微积分中的黑塞矩阵来判断了。…

网络基础 【HTTPS】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…

Linux之实战命令26:timeout应用实例(六十)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

安卓手机密码忘了怎么办?(只做科普)

注意&#xff1a;只做科普&#xff0c;拒绝利用技术做一些非法事情 科普人&#xff1a;网络安全工程师~DL 科普平台&#xff1a;快手&#xff0c;CSDN&#xff0c;微信公众号&#xff0c;小红书&#xff0c;百度&#xff0c;360 本期文章耗时比较大&#xff0c;如果喜欢&…

数学题-分糖果-答案解析

PDF文档回复:20241005 1[题目描述] 幼儿园有7个小朋友&#xff0c;你是其中之一&#xff0c;有一天你发现无穷多颗糖&#xff0c;最少可以拿16个&#xff0c;最多可以拿23个&#xff0c;你打算拿一些分给小朋友们&#xff0c;分配原则是如果每人(包括你)都可以拿1块糖&#xf…

快速上手C语言【上】(非常详细!!!)

目录 1. 基本数据类型 2. 变量 2.1 定义格式 和 命名规范 2.2 格式化输入和输出&#xff08;scanf 和 printf&#xff09; ​编辑 2.3 作用域和生命周期 3. 常量 4. 字符串转义字符注释 5. 操作符 5.1 双目操作符 5.1.1 算数操作符 5.1.2 移位操作符 5.1.3 位操作符…

IDEA下“File is read-only”可能原因及“找不到或无法加载主类”问题的解决

1.File is read-only”可能原因 写代码时想要修改这个静态变量的值&#xff0c;把这个语句注释掉&#xff0c;发现在这个文件中File is read-only无法编辑修改&#xff0c;于是想去掉这个状态 网上查看的解释大多是在File栏目或File->File Properties下可以找到Make File W…

Git介绍--github/gitee/gitlab使用

一、Git的介绍 1.1、学习Git的原因&#xff1a;资源管理 1.2、SCM软件的介绍 软件配置管理(SCM)是指通过执行版本控制、变更控制的规程&#xff0c;以及使用合适的配置管理软件来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。 二、版本控制软件 …

常见的基础系统

权限管理系统支付系统搜索系统报表系统API网关系统待定。。。 Java 优质开源系统设计项目 来源&#xff1a;Java 优质开源系统设计项目 | JavaGuide 备注&#xff1a;github和gitee上可以搜索到相关项目

企业必备:搭建大模型应用平台实操教程

最近AI智能体很火&#xff0c;AI智能体平台化产品肯定属于大公司的。但在一些场景下&#xff0c;尤其是对业务数据要求很高的公司&#xff0c;那就只能用私有大模型。不一定完全是为了对外提供服务&#xff0c;对内改造工作流也是需要的。所以 我感觉未来大部分企业都会搞一个…

软考系统分析师知识点二:经济管理

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;35天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

数字乡村综合解决方案

1. 项目背景与战略 《中共中央、国务院关于实施乡村振兴战略的意见》强调实施数字乡村战略的重要性&#xff0c;旨在通过信息技术和产品服务推动农业农村现代化&#xff0c;实现城乡数字鸿沟的弥合。 2. 数字乡村发展纲要 《数字乡村发展战略纲要》明确了全面建成数字乡村的…

颍川陈氏始祖陈寔逆势崛起的原由(二)有贵人相助

园子说颍川 陈寔崛起之初&#xff0c;有两个贵人发挥了关键作用。 第一个就是许县县令邓邵&#xff0c;如果不是他推荐青年陈寔去太学读书&#xff0c;陈寔可能一辈子就要待在许县县衙当小吏了。关于他的记载不详&#xff0c;光这一件事就让他名垂青史&#xff0c;帮助一个穷…

为Floorp浏览器添加搜索引擎及搜索栏相关设置. 2024-10-05

Floorp浏览器开源项目地址: https://github.com/floorp-Projects/floorp/ 1.第一步 为Floorp浏览器添加搜索栏 (1.工具栏空白处 次键选择 定制工具栏 (2. 把 搜索框 拖动至工具栏 2.添加搜索引擎 以添加 搜狗搜索 为例 (1.访问 搜索引擎网址 搜狗搜索引擎 - 上网从搜狗开始 (2…

【AIGC】ChatGPT提示词Prompt助力自媒体内容创作升级

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效仿写专家级文章提示词使用方法 &#x1f4af;CSDN博主账号分析提示词使用方法 &#x1f4af;自媒体爆款文案优化助手提示词使用方法 &#x1f4af;小结 &#x1f4af…

王者农药更新版

一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO&#xff0c;所以RCC开启APB2时钟 2.GPIO初始化&#xff08;结构体&#xff09; 3.给GPIO引脚设置高/低电平&#xff08;WriteBit&#xff09; 2.2Led循环点亮&#xff08;GPIO输出&#xff09; 1.RCC开启APB2时钟。…

Transformer架构概述(二)

目录 1. Transformer架构概述 1.1 《Attention is All You Need》论文概述 1.2 Transformer的模块组成 1.3 Encoder 和 Decoder 的区别与联系 2. Transformer的并行计算效率相对于RNN的提升 2.1 RNN中的顺序处理问题 2.2 Transformer中的并行化优势 3. Self-Attention机…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息&#xff0c;可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout&#xff0c;setInterval &#xff0c;requestAnimationFrame定时器 定时器函数通常用于执行定时任务&#xff0c;也就是说你做了一个功能放在定时器函数里&#xff0c;它可以在特定的时间去执行你的指令&#xff0c;或者说隔多长时间&#xff08;单位时间内—毫秒为…