正方形

正方形

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给出四个点,判断这四个点能否构成一个正方形。

输入

 输入的第一行包含一个整数T(T≤30)表示数据组数,每组数据只有一行,包括8个整数x1, y1, x2, y2,x3,y3,x4,y4(数据均在-1000,1000 之间)以逆时针顺序给出四个点的坐标。

输出

 每组数据输出一行,如果是正方形,则输出: YES, 否则,输出:NO。

示例输入

20 0 1 0 1 1 0 1-1 0 0 -2 1 0 2 0

示例输出

YESNO

提示

 

来源

 

示例程序

  1. #include<stdio.h>  
  2. #include<math.h>  
  3. int main()  
  4. {  
  5.     int T;  
  6.     int x1, x2, x3, x4, y1, y2, y3, y4;  
  7.     scanf("%d", &T);  
  8.     while(T--)  
  9.     {  
  10.         double a, b, c, d;  
  11.         scanf("%d%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);  
  12.         a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));  
  13.         b=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));  
  14.         c=sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3));  
  15.         d=sqrt((x1-x4)*(x1-x4)+(y1-y4)*(y1-y4));  
  16.         if(a==b &&b==c && c==d)  
  17.         {  
  18.             double e=(x2-x4)*(x2-x4)+(y2-y4)*(y2-y4);  
  19.             //if(a*a+d*d==e*e)  
  20.             if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(x1-x4)*(x1-x4)+(y1-y4)*(y1-y4)==e)  
  21.                 printf("YES\n");  
  22.             else  
  23.                 printf("NO\n");  
  24.         }  
  25.         else  
  26.             printf("NO\n");  
  27.     }  
  28.     return 0;  
  29. }  

 

在已知矩形宽高的条件下绘制正方形,可以通过将矩形的最小边作为正方形的边长,确保正方形完全内嵌于矩形中。具体实现方法取决于绘制平台和编程语言,以下是几种常见方式的实现思路。 ### 使用 Python OpenCV 绘制内嵌正方形 OpenCV 提供了绘制矩形和多边形的功能,可以通过计算矩形的中心点和边长,将正方形绘制在矩形内部。 ```python import cv2 import numpy as np # 矩形参数 rect_start = (50, 50) rect_width = 100 rect_height = 60 # 计算正方形边长(取矩形宽高的较小值) square_size = min(rect_width, rect_height) # 计算正方形的左上角坐标 square_start = ( rect_start[0] + (rect_width - square_size) // 2, rect_start[1] + (rect_height - square_size) // 2 ) # 创建空白图像 image = 255 * np.ones((200, 200, 3), dtype=np.uint8) # 绘制矩形 cv2.rectangle(image, rect_start, (rect_start[0] + rect_width, rect_start[1] + rect_height), (0, 0, 0), 2) # 绘制正方形 cv2.rectangle(image, square_start, (square_start[0] + square_size, square_start[1] + square_size), (0, 0, 255), 2) # 显示图像 cv2.imshow("Square in Rectangle", image) cv2.waitKey(0) cv2.destroyAllWindows() ``` ### 使用 PHP Imagick 绘制内嵌正方形 在 PHP 中使用 Imagick 扩展库可以实现图形绘制,通过设置正方形的中心点和边长,确保其在矩形内部居中显示。 ```php // 创建 ImagickDraw 对象 $draw = new ImagickDraw(); // 设置填充颜色 $draw->setFillColor('red'); // 已知矩形的左上角坐标 (x, y),宽度 width,高度 height $x = 50; $y = 50; $width = 100; $height = 60; // 计算正方形边长 $square_size = min($width, $height); // 计算正方形左上角坐标 $square_x = $x + ($width - $square_size) / 2; $square_y = $y + ($height - $square_size) / 2; // 绘制正方形 $draw->rectangle($square_x, $square_y, $square_x + $square_size, $square_y + $square_size); // 创建图像并绘制 $image = new Imagick(); $image->newImage(200, 200, 'white', 'png'); $image->drawImage($draw); $image->setImageFormat('png'); header("Content-Type: image/png"); echo $image; ``` ### 数学原理与坐标计算 绘制正方形的核心在于确定其边长和位置。已知矩形的宽高后,正方形的边长应为矩形宽高的最小值,以确保其完全内嵌。正方形的中心点设为矩形的中心点,位置计算公式如下: - 正方形边长 = min(矩形宽度, 矩形高度) - 正方形左上角横坐标 = 矩形左上角横坐标 + (矩形宽度 - 正方形边长) / 2 - 正方形左上角纵坐标 = 矩形左上角纵坐标 + (矩形高度 - 正方形边长) / 2 该方法适用于图像处理、图形绘制以及交互式绘图应用,如使用 OpenCV 实现鼠标绘制矩形并自动生成内嵌正方形的功能[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值