Suzen написал(а):Нет, с контроллерами я к сожалению дела не имела и я программист любитель, пишу в основном разные забавные програмки для себя и для друзей, и иногда несложные игрушки для бабушки, а работаю я по другой специальности - гейм мастером.
Может быть тогда для дела освоения космоса оформите эти коды, чтобы на экране смотрелось. А то мне надо и туды и сюды. Руки не доходят. Правда сопротивление атмосферы так руки и не дошли сделать по Маху. Так что вы это место в исправленных кодах как-нить выделите.
Если вам, конечно, не трудно заморочиться этой программкой.
// Traektr0View.cpp : implementation of the CTraektr0View class
//
#include "stdafx.h"
#include "Traektr0.h"
#include "Traektr0Doc.h"
#include "Traektr0View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "cmath"
/////////////////////////////////////////////////////////////////////////////
double gm0;
double a;
double R;//Радиус орбиты
double R0;//Радиус Земли
double vy;
double vx;
double dvy;
double dvx;
double v;//скорость ракеты
double alfa;//угол полета
double dl;
double dt;
double dR;
double dbeta;
double beta;//угловой путь ракеты
double x;
double y;
double c;
double pi;
int i0a;
int j0a;
int fl;
char znm2[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
double mn;//масса ракеты
double m1;//масса газов, выбрасываемых за секунду
double v1;//удельный импульс
double kx1;
double kx2;
double gama;//угол положения ракеты
double vn;
double v2;
double nu;//вязкость воздуха
double r;//лобовой радиус ракеты
double vv;
double av;
// CTraektr0View
IMPLEMENT_DYNCREATE(CTraektr0View, CView)
BEGIN_MESSAGE_MAP(CTraektr0View, CView)
//{{AFX_MSG_MAP(CTraektr0View)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTraektr0View construction/destruction
CTraektr0View::CTraektr0View()
{
// TODO: add construction code here
R=6376000;R0=6371000;
c=6371000/150;
dvx=0;dvy=0;vy=0;dt=0.01;vx=232.8;
v1=2820;//2650;
fl=100;
r=3.2;
alfa=0;pi=3.141592;
gm0=6.672*5.978*10000000000000;
v=232.8;//0;//sqrt(pow(vy,2)+pow(vx,2));
gama=0;//pi/6;
}
CTraektr0View::~CTraektr0View()
{
}
BOOL CTraektr0View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTraektr0View drawing
void CTraektr0View::OnDraw(CDC* pDC)
{
CTraektr0Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CClientDC ClientDC(this);
//if(fl==10)goto a1;
a=gm0/pow(R,2);
if(alfa<pi)alfa=acos(vx/v);
else asin(vy/v);
dl=vx*dt;
dR=vy*dt;
R=sqrt(pow((R+dR),2)+pow(dl,2));
dbeta=asin(dl/R);
v_ot_m();
vy=vy-a*dt;
vx=vx+dvx;vy=vy+dvy;
v=sqrt(pow(vy,2)+pow(vx,2));
vx=vx*cos(dbeta)-vy*sin(dbeta);
vy=vy*cos(dbeta)+vx*sin(dbeta);
beta=beta+dbeta;
x=R*sin(beta)/c;
y=R*cos(beta)/c;
pDC->SetPixel(250+(int)x,200-(int)y,19);
x=R*sin(beta)*20000/6371000;
y=R*cos(beta)*20000/6371000;
pDC->SetPixel(10+(int)x,20520-(int)y,19);
ClientDC.TextOut(430,0,"Скорость: ");
j0a=0;
sprintf(znm2,"%f",v);
for(i0a=0;i0a<20;i0a++){
ClientDC.TextOut(i0a*12+500,j0a*15,znm2[i0a]);
}
ClientDC.TextOut(440,15,"Радиус: ");
j0a=1;
sprintf(znm2,"%f",R);
for(i0a=0;i0a<20;i0a++){
ClientDC.TextOut(i0a*12+500,j0a*15,znm2[i0a]);
}
ClientDC.TextOut(440,45,"Высота: ");
j0a=3;
x=R-R0;
sprintf(znm2,"%f",x);
for(i0a=0;i0a<20;i0a++){
ClientDC.TextOut(i0a*12+500,j0a*15,znm2[i0a]);
}
RECT Rect;
Rect.left=0;//i00*10;
Rect.top=0;
Rect.right=Rect.left+500;
Rect.bottom=Rect.top+600;
InvalidateRect(&Rect,FALSE);
//fl=10;
//a1:;
}
/////////////////////////////////////////////////////////////////////////////
// CTraektr0View diagnostics
#ifdef _DEBUG
void CTraektr0View::AssertValid() const
{
CView::AssertValid();
}
void CTraektr0View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTraektr0Doc* CTraektr0View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTraektr0Doc)));
return (CTraektr0Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTraektr0View message handlers
void CTraektr0View::v_ot_m()
{
CClientDC ClientDC(this);
if(fl==100){mn=26570;m1=144;fl=0;kx10();}
if(fl==0){if(mn<=14906){mn=mn-696;m1=144;fl=1;kx10();}}
//отстрел первой ступени
if(fl==1){if(mn<=7730){v1=3200;m1=18;mn=mn-1164;fl=2;kx10();}}
//отстрел второй, 1164 - это масса шести пустых блоков
//третьей
if(fl==2){if(mn<=2930){mn=mn-180;fl=3;kx10();}}
/////////регулировка угла положения ракеты
//if(v>=464)gama=0.5+log(((v)/4715)+1);//3.8;//4152
if(v>=232)gama=0.275+((v+330)*pi/(10000*2));//0.27//0.005+log(((v)/1715)+1);//3.8;//4152
if(gama>=(pi/2))gama=pi/2;
////////
if(fl<=3){
if(mn>932.1){
vn=kx1/mn;
mn=mn-kx2;
nu=1.72/pow(2.718,(0.000125*(R-R0)));
v2=6*pi*nu*r*(v-232.8)*dt/mn;
//СОПРТИВЛЕНИЕ АТМОСФЕРЫ
vn=vn-v2;
/////
if(v>2490)//2804)//2854)//2740)//2750)
{
gama=pi/2;
av=gm0/pow(R,2)-pow(vx,2)/R;
vv=av*dt;
if(vn>2*vv){if(vy<1.8*vv)gama=acos(1.57*vv/vn);}
}
/////
dvx=vn*sin(gama);dvy=vn*cos(gama);
}
else {dvx=0;dvy=0;}
}
ClientDC.TextOut(440,30,"Масса: ");
j0a=2;
memset(znm2,32,sizeof(znm2));
sprintf(znm2,"%f",mn);
for(i0a=0;i0a<20;i0a++){
ClientDC.TextOut(i0a*12+500,j0a*15,znm2[i0a]);}
}
void CTraektr0View::kx10()
{
kx1=m1*v1*dt;kx2=m1*dt;
}