杭电多校第六场个人题解

7205 - Map

题意

求矩形M和矩形N中相对位置不变的点

思路

\because P = D+x\underset{DC}{\rightarrow}+y\underset{DA}{\rightarrow} =d+x\underset{dc}{\rightarrow}+y\underset{da}{\rightarrow}

\therefore\left\{\begin{matrix} x_{D}+x(x_{C}-x_{D})+y(x_{A}-x_{D})=x_{d}+x(x_{c}-x_{d})+y(x_{a}-x_{d}) \\ y_{D}+x(y_{C}-y_{D})+y(y_{A}-y_{D})=y_{d}+x(y_{c}-y_{d})+y(y_{a}-y_{d}) \end{matrix}\right.

\therefore\left\{\begin{matrix} (x_{C}-x_{c}+x_{d}-x_{D})x+(x_{A}-x_{a}+x_{d}-x_{D})y=x_{d}-x_{D} \\ (y_{C}-y_{c}+y_{d}-y_{D})x+(y_{A}-y_{a}+y_{d}-y_{D})y=y_{d}-y_{D} \end{matrix}\right.

形如\left\{ \begin{matrix} ax+by=c \\ dx+ey=f \end{matrix}\right.   

 解为\left\{ \begin{matrix} y=\frac{f-\frac{d}{a}*c}{c-\frac{d}{a}*b} \\ x=\frac{c-by}{a} \end{matrix}\right.

代码

#include <bits/stdc++.h>
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define debug system("pause")
#define ll long long
#define endl "\n"

struct point{
    int x,y;
}; 

void solve(){
 point A,B,C,D,a,b,c,d;
 cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y
    >>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;
  int a_=C.x-c.x+d.x-D.x;
  int b_=A.x-a.x+d.x-D.x;
  int c_=d.x-D.x;
  int d_=C.y-c.y+d.y-D.y;
  int e_=A.y-a.y+d.y-D.y;
  int f_=d.y-D.y;
  double y=(f_-d_*c_*1.0/a_)/(e_-d_*b_*1.0/a_);
  double x=(c_-b_*y)/a_;
  double ans1 =  D.x + x*(C.x-D.x)+y*(A.x-D.x);
  double ans2 = D.y + x*(C.y-D.y)+y*(A.y-D.y);
cout<<fixed<<setprecision(6)<<ans1<<" "<<ans2<<endl;
}

int main(){
    js;
    int T;cin>>T;
    while(T--) solve();
    debug;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值