说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

做一个OpenGL控件-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
做一个OpenGL控件-Delphi资料

OpenGL是一个独立于窗口的图形库,而图形最终是在窗口系统里绘制出来的,那么OpenGL的绘图命令是怎么在窗口里生成输出的呢?

这就是各个系统上的OpenGL实现者需要做的工作了。在Windows里是通过wgl库完成的,在X-Windows里是通过glx服务器来完成的,至于这些OpenGL实现具体是怎么工作的,请参考sgi发布的sample implement源码,不过那个代码是用C写的。

在MS-Windows里,wgl库负责将OpenGL的绘制设备RenderContext与GDI的DeviceContext联系起来,使得发到OpenGL的RC里的命令生成的位图能够在GDI DC里绘制出来,你可以把它想象成OpenGL在RC里有一个FrameBuffer,记录着生成的图案,而wgl则负责把FrameBuffer的内容BitBlt到DC上。当然,这并不是它实际的工作方法,如果想了解更多请参考SGI发布的SDK资料或联系MS公司。

为了使GDI DC能够接受OpenGL RC的输出,必须为DC选定特别的像素格式,然后建立RC,再用wglMakeCurrent把当前要使用的RC和DC联系起来。此后我们就可以用OpenGL命令正常工作了。在一个程序里可以创建多个RC和多个DC,程序中的OpenGL命令会发到被wglMakeCurrent指定为当前的那一组合中。

我并不认为这个初始化过程是个很有意思的工作,这个世界上有很多聪明的程序员也这么想,所以他们发明了glaux库和glut库。glaux是在著名的OpenGL Programmer Guide里提出的,这本书是OpenGL编程的官方文档,因为它的封皮是红色的,所以通常简称为RedBook。故名思意,glaux是一套输助库,它使得你无须关心在具体窗口系统里初始化、消息响应的细节,而是使用传统的c/dos程序风格编制OpenGL程序。

int main(int argc

char** argv)

{ auxInitDisplayMode( AUX_SINGLE|AUX_RGB|AUX_DEPTH16);//使用单缓冲、RGB彩色模式、16位浓度

auxInitPosition(0

0

250

250);

auxInitWindow("Title");//以上两行在(0

0)片建立了一个大小为250X250的窗口,其标题为"Title"。

myinit();//建立OpenGL透视投影环境

auxReshapeFunc(myReshape);//指定窗口大小变化的响应函数

auxMainLoop(display);//指定绘制函数

return 0; }

由于glaux是为教学目的开发的,所以实用价值很限,所以又有程序员开发了glut,这套库被广泛使用,它的工作方式与glaux极为类似,但功能完善得多,特别是对交互、全屏等的支持要理想得多,所以许多的OpenGL演示程序使用它,比如SGI网站上提供的多数演示程序都需要使用它。同时这套库已经被移植到多种平台上,所以要是想用简单的方法开发在windows/macos/os2/xwindows等系统上都能使用的程序,那么应该选择这套库。

我并不认为一个Delphi程序员会喜欢glaux或glut,因为那意味着你不能利用Delphi的可视开发能力,另外任何真正实用的Delphi程序想直接在其它操作系统上编译运行好象也不现实,即glut的跨平台能力也没有什么吸引力。我们应该开发一个VCL控件,把初始化工作封装起来。

我认为从TCustomPanel派生一个子类比较方便,让我们称它为TGLPanel吧。初始化过程要在WMCreate里完成,之所以要放在这里是因为这个时候Window Handle已经建立,但还没启用。

在WMCreate中会

①调用initDC完成DC调整工作,initDC会以本窗口使用的DC调用PreparePixelFormat,而PixelFormat则真正完成像素格式调整。

②然后WMCreate会调用InitGL完成OpenGL透视投影环境的设定。

③最后调用OnInit给用户一个调整透视投影环境的机会。

注意,如果要在MDI环境中的子窗体中使用OpenGL,还有些附加工作要做,这就是给窗口类的Params.Style加上WS_CLIPCHILDREN和WS_CLIPSIBLINGS属性,这得在Window Handle建立之前就完成,因此要写在CreateParams里。由于SDI应用并不需要该代码,所以应该定义OnPreInit事件,让用户在需要的时候自己加上,在Create里调用OnPreInit。以下代码定义了OnPreInit,但并没有定义CreateParams,如果需要自己加上吧。

在TGLPanel类中实际所做工作的详细说明(按成员可见性组织):

私有

1、加入DC/RC/Pal私有变量

2、定义初始化DC/RC的私有方法

保护:

3、加入FOnPaint

FOnResize

FOnInit

FOnPreInit四个事件响应变量。

4、继承/重载虚方法CreateParams

Paint

Resize

5、响应以下消息

WM_CREATE

TWMCreate

WMCreate

WM_DESTROY

TWMDestroy

WMDestroy

WM_PALETTECHANGED

TWMPaletteChanged

WMPaletteChanged

WM_QUERYNEWPALETTE

TWMQueryNewPalette

WMQueryNewPalette

WM_ERASEBKGND

TWMEraseBkgnd

WMEraseBkgnd

公开:

6、定义建构与析构方法

7、定义必要的其它方法以提供各种特性

发布:

8、以下继承来的属性

__property Alignment;

__property Align;

__property DragCursor;

__property DragMode;

__property Enabled;

__property ParentFont;

__property ParentShowHint;

__property PopupMenu;

__property ShowHint;

__property TabOrder;

__property TabStop;

__property Visible;

9、以下继承来的方法

__property OnClick;

__property OnDblClick;

__property OnDragDrop;

__property OnDragOver;

__property OnEndDrag;

__property OnEnter;

__property OnExit;

__property OnMouseDown;

__property OnMouseMove;

__property OnMouseUp;

__property OnStartDrag;

10、加入以下事件

//初始化OpenGL状态

__property TNotifyEvent OnInit = {read=FOnInit

write=FOnInit};

//专用于修改显示BPP模式

__property TNotifyEvent OnPreInit = {read=FOnPreInit

write=FOnPreInit};

11、重载以下事件

__property TNotifyEvent OnResize = {read=FOnResize

write=FOnResize};

__property TNotifyEvent OnPaint = {read=FOnPaint

write=FOnPaint};

12、将消息与其响应函数连接起来(Delphi中这一步是在定义函数时指定的)

源代码

unit GLPanel;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

ExtCtrls

OpenGL;

type

TGLPanel = class(TCustomPanel)

private

{ Private declarations }

DC: HDC;

RC: HGLRC;

procedure initDC;

procedure initGL;

procedure PreparePixelFormat(var DC: HDC);

protected

{ Protected declarations }

FOnPaint:TNotifyEvent;

FOnInit:TNotifyEvent;

FOnPreInit:TNotifyEvent;

FOnResize:TNotifyEvent;

procedure Paint;override;

procedure Resize;override;

procedure WMDestroy(var Msg: TWMDestroy);message WM_DESTROY;

procedure WMCreate(var Msg:TWMCreate); message WM_CREATE;

public

{ Public declarations }

constructor Create(Owner:TComponent);override;

published

{ Published declarations }

property Alignment;

property Align;

property DragCursor;

property DragMode;

property Enabled;

property ParentFont;

property ParentShowHint;

property PopupMenu;

property ShowHint;

property TabOrder;

property TabStop;

property Visible;

property OnClick;

property OnDblClick;

property OnDragDrop;

property OnDragOver;

property OnEndDrag;

property OnEnter;

property OnExit;

property OnMouseDown;

property OnMouseMove;

property OnMouseUp;

property OnStartDrag;

property OnInit:TNotifyEvent read FOnInit write FOnInit;

property OnPreInit:TNotifyEvent read FOnPreInit write FOnPreInit;

property OnResize:TNotifyEvent read FOnResize write FOnResize;

property OnPaint:TNotifyEvent read FOnPaint write FOnPaint;

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents(’Samples’

[TGLPanel]);

end;

//---------------------------------------------

constructor TGLPanel.Create;

begin

inherited;

end;

//---------------------------------------------

procedure TGLPanel.WMDestroy(var Msg: TWMDestroy);

begin

wglMakeCurrent(0

0);

wglDeleteContext(RC);

ReleaseDC(Handle

DC);

end;

//---------------------------------------------------

procedure TGLPanel.initDC;

begin

DC := GetDC(Handle);

PreparePixelFormat(DC);

end;

//---------------------------------------------------

procedure TGLPanel.initGL;

begin

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity;

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glOrtho(-1

1

-1

1

-1

50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity;

glEnable(GL_DEPTH_TEST);

//注意下面这一行是为了做练习程序时可以直接用glColor指定材质而加的,

// 可能使得光照或表面材质发生意想不到的变化,

// 如果不需要可以去掉或在程序中用glDisable(GL_COLOR_MATERIAL);关闭

glEnable(GL_COLOR_MATERIAL);

glShadeModel(GL_SMOOTH);

gluLookAt(2

4

6

0

0

0

0

1

0);

SwapBuffers(DC);

end;

//---------------------------------------------

procedure TGLPanel.PreparePixelFormat(var DC: HDC);

var

PFD : TPixelFormatDescriptor;

ChosenPixelFormat : Integer;

begin

FillChar(PFD

SizeOf(TPixelFormatDescriptor)

0);

with PFD do

begin

nSize := SizeOf(TPixelFormatDescriptor);

nVersion := 1;

dwFlags := PFD_DRAW_TO_WINDOW or

PFD_SUPPORT_OPENGL or

PFD_DOUBLEBUFFER;

iPixelType := PFD_TYPE_RGBA;

cColorBits := 16; // 16位颜色

cDepthBits := 32; // 32位深度缓冲

iLayerType := PFD_MAIN_PLANE;

{ Should be 24

but we must allow for the clunky WKU boxes }

end;

ChosenPixelFormat := ChoosePixelFormat(DC

@PFD);

if ChosenPixelFormat = 0 then

Raise Exception.Create(’ChoosePixelFormat failed!’);

SetPixelFormat(DC

ChosenPixelFormat

@PFD);

end;

procedure TGLPanel.WMCreate(var Msg:TWMCreate);

begin

//在这里做初始化工作

//修改DC的象素格式,使之支持OpenGL绘制

initDC;

RC := wglCreateContext(DC);

wglMakeCurrent(DC

RC);

//初始化GL绘制系统

initGL;

if Assigned(FOnInit) then

begin

if (wglMakeCurrent(DC

RC)=false) then

ShowMessage(’wglMakeCurrent:’ + IntToStr(GetLastError));

FOnInit(self);

end;

end;

//

procedure TGLPanel.Paint;

begin

//TCustomPanel::Paint();

if Assigned(FOnPaint) then

begin

wglMakeCurrent(DC

RC);

FOnPaint(self);

SwapBuffers(DC);

end;

end;

//

procedure TGLPanel.Resize;

begin

inherited;

if Assigned(FOnResize) then

begin

wglMakeCurrent(DC

RC);

glViewport(0

0

ClientWidth

ClientHeight);

FOnResize(self);

end;

end;

end.

以上代码仅用来说明原理及建立一个基本的练习环境,您可以自由使用,转载请注明出处。如果使用从本人主页下载的TGLPanel请遵守内附使用说明的版权申明。如果实际做东西,建议使用Mike Lischke的GLScene控件组(http://www.lischke-online.de/)。

end

else

删除注册表项....................... end;初始化扩展是通过IShellExtInit实现的,当外壳调用IShellExtInit.Initialize时,它传递一个数据对象包含来文件对应的目录的PIDL标识符。Initialize方法需要从数据对象中提取文件名,并把文件名和PIDL标识符保存起来为了以后使用。

function TCXPropSheet.SEIInitialize(pidlFolder: PItemIDList;

lpdobj: IDataObject; hKeyProgID: HKEY): HResult;

var

StgMedium: TStgMedium;

FormatEtc: TFormatEtc;

szFile: array[0..MAX_PATH+1]of Char;

filecount: integer;begin

Result:=E_FAIL;

if(lpdobj=nil)then

begin

Result:=E_INVALIDARG;

messagebox(0

’1’

’错误’

mb_ok);

Exit;

end;

with FormatEtc do

begin

cfFormat:=CF_HDROP;

ptd:=nil;

dwAspect:=DVASPECT_CONTENT;

lindex:=-1;

tymed:=TYMED_HGLOBAL;

end;

Result:=lpdobj.GetData(FormatEtc

StgMedium);

if Failed(Result)then

Exit;

//如果只有一个文件被选中,获得文件名并保存。

filecount:=DragQueryFile(stgmedium.hGlobal

$FFFFFFFF

nil

0);

if filecount=1 then

begin

Result:=NOERROR;

DragQueryFile(stgmedium.hGlobal

0

szFile

SizeOf(szFile));

FFilename:=strpas(szFile);

end;

ReleaseStgMedium(StgMedium);end;添加页面的操作是通过IShellPropSheetExt接口来实现的。如果属性页是和文件相关联,外壳会调用IShellPropSheetExt.AddPages给属性页添加一个页面。如果属性页同控制面板程序相关联,外壳调用IShellPropSheetExt.ReplacePage来替换页面。

IShellPropSheetExt.AddPages方法有两个参数,lpfnAddPage是一个指向AddPropSheetPageProc回调函数的指针,回调函数用来提供要添加的页面信息给外壳。lParam是一个用户自定义的值,这里我们用它来返回给回调函数对象。

一般的IShellPropSheetExt.AddPages方法实现步骤是:

给PROPSHEETPAGE结构设定正确的值,特别是:

把扩展的对象引用记数变量付值给pcRefParent成员,这可以防止页面还在显示时,扩展对象被卸载。

实现PropSheetPageProc回调函数来处理页面创建和销毁的情况。

调用CreatePropertySheetPage函数来创建页面。

调用lpfnAddPage指向的函数来来添加创建好的页面。

function TCXPropSheet.AddPages(lpfnAddPage: TFNADDPROPSHEETPAGE;

lParam: LPARAM): HResult;var

PSP: TPropSheetPage;

HPSP: HPropSheetPage;begin

result:=E_FAIL;

try

psp.dwSize:=SizeOf(psp);

psp.dwFlags:=PSP_USEREFPARENT or PSP_USETITLE or PSP_USECALLBACK;

psp.hInstance:=hInstance;

//这里我们使用了事先储存在wave.res中的对话框模板

模板是用delphi5自带的

//resource workshop编辑的,使用delphi5\bin\brcc32.exe编译的。

psp.pszTemplate:=MakeIntResource(100);

//标题名

psp.pszTitle:=’波文件信息’;

//设定回调函数

psp.pfnDlgProc:=@DialogProc;

psp.pfnCallBack:=@PropCallback;

//设定对象引用记数变量

psp.pcRefParent:=@comserver.objectcount;

//用lParam向回调函数传递对象

psp.lParam:=integer(self);

HPSP:=CreatePropertySheetPage(psp);

if HPSP<>nil then begin

if not lpfnAddPage(HPSP

lParam)then begin

DestroyPropertySheetPage(HPSP);

end else begin

_addref;//增加引用记数,否则一脱离这个方法的作用域,delphi自动释放对象。

result:=S_OK;

end

end

except

on e: exception do begin

e.message:=’添加页面’+e.message;

messagebox(0

pchar(e.message)

’错误’

mb_ok);

end;

end;end;

function TCXPropSheet.ReplacePage(uPageID: UINT;

lpfnReplaceWith: TFNADDPROPSHEETPAGE; lParam: LPARAM): HResult;begin

Result:=E_NOTIMPL;//同文件关联时,外壳不调用ReplacePage

所以不用实现end;回调函数处理属性页的消息,主要要响应WM_INITDIALOG消息来初始化页面显示信息,响应WM_COMMAND消息来处理用户交互,响应WM_NOTIFY消息来处理页面切换或关闭后处理操作结果。

function DialogProc(hwndDlg: HWnd; Msg: UINT; wParam: wParam;

lParam: LPARAM): Bool; stdcall;

var

PageObj: TCXPropSheet;

filename: string;

displayName : string;

SheetHWnd: HWnd;

begin

result:=false;

try

if Msg=WM_INITDIALOG then begin//初始化界面

//获得lparam传递过来的对象

pageObj:=TCXPropSheet(PPropSheetPage(lParam)^.lParam);

//保存对象信息

SetWindowLong(hwndDlg

DWL_USER

integer(pageObj));

//设置界面显示波文件信息

SetDlgItemText(hwndDlg

100

PChar(ExtractFileName(PageObj.FFileName)));

OpenMedia(PageObj.FFileName);

SetDlgItemText(hwndDlg

101

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_AVGBYTESPERSEC))));

SetDlgItemText(hwndDlg

102

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_BITSPERSAMPLE))));

SetDlgItemText(hwndDlg

103

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_CHANNELS))));

CloseMedia;

SetWindowLong(hwndDlg

DWL_MSGRESULT

0);

Result:=TRUE;

end

else if(Msg=WM_COMMAND)then begin

if Lo(wParam)=110 then//用户点击了关于按钮(id=110)

MessageBox(0

’作者:hubdog’+#13#10+’email:hubdog@263.net’

’关于...’

MB_OK);

end else if(msg=WM_NOTIFY)then begin

sheetHwnd:=getparent(hwndDlg);//获得属性页的窗口句柄

case PNMHdr(lparam)^.code of

//页面失去焦点

PSN_KILLACTIVE:

begin

SetWindowLong(hwndDlg

DWL_MSGRESULT

0);

Result:=TRUE;

end;

end;

end;

except

on e: exception do begin

e.message:=’回调处理’+e.message;

messagebox(0

pchar(e.message)

’错误’

mb_ok);

end;

end;

end;

建立同驱动器相关联的属性页扩展用

同上面讲的有两点不同:

IShellExtInit.Initialize方法传递过来的数据对象包含的驱动器路径可能是CFSTR_MOUNTEDVOLUME格式而不是CF_HDROP格式的。标准驱动器是CF_HDROP格式的,而在NTFS文件系统中映射的远程设备则是CFSTR_MOUNTEDVOLUME格式的。

注册表项是HKEY_CLASSES_ROOT\Drive\Shellex\PropertySheetHandlers子键。

建立控制面板属性页扩展

同上面讲的有两点不同:

控制面板程序调用IShellPropSheetExt.ReplacePage方法来替换页面,它不调用IShellPropSheetExt。AddPages方法。

注册方式:子键可以在不同位置创建,这依赖于扩展是针对用户还是针对机器的。对用户方式子键是HKEY_CURRENT_USER\REGSTR_PATH_CONTROLPANEL,否则子键是HKEY_LOCAL_MACHINE\REGSTR_PATH_CONTROLSFOLDER。

本程序在Delphi5,Win NT 4.0,K6-233系统下调试成功。例子程序可以到http://chaozhi.com/lgc去下载

$.meta.setType(type, name)-JQuery API data()-JQuery API disableTab(position)-JQuery API enableTab(position)-JQuery API tabs(initial, settings)-JQuery API triggerTab(position)-JQuery API triggerTab(position)-JQuery API Tooltip(settings)-JQuery API PHP简介-PHP初学入门教程1 选择PHP的理由 -PHP初学入门教程2 从一个简单的程序来了解PHP -PHP初学入门教程3 PHP语法基础 -PHP初学入门教程4 建设一个简单的交互网站(一) -PHP初学入门教程5 建设一个简单交互的网站(二) -PHP初学入门教程6 建设一个简单交互的网站(三)密码验证 -PHP初学入门教程7 PHP文件上传 -PHP初学入门教程8 为站点添加投票功能 -PHP初学入门教程9 广告条轮播-PHP初学入门教程10 操作MySQL数据库实现简单的留言板-PHP初学入门教程11 使用PHP来操作Oracle数据库 -PHP初学入门教程12 技术杂项PHP教程结束篇 -PHP初学入门教程13 .NET中DataSet和DataReader的区别与转换 CGI技术及其开发(二)-Delphi资料 CGI技术及其开发(一)-Delphi资料 COM/DCOM中如何传递数组-Delphi资料 COM与DCOM的区别与联系-Delphi资料 Cookie的建立使用-Delphi资料 Delphi 3中Cookie的建立使用 Delphi 中 串 行 通 信 的 实 现 Delphi4.0 开发WEBMAIL程序 Delphi4的Winsocket编程 How to alter DBGrid Scrollheader Color? c怎样访问数据库啊?一定给分! from里的参数传递为ENCTYPE="multipart/form-data"时的问题? 网吧问题 如何在txt文件中查找字符 请问如何实现当进入一个combox时自动下拉列表框(不用用鼠标去点) 关于volatile 修饰词 过去用Delphi开发数据库都是用Access,现在急需使用SQL Server。请问:我必须掌握SQL Server中的那些内容。 如果我想删除日志文件的所有记录该怎么办?????? 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!! 请问,NT4.0下怎样配置网关和路由? 请问如何知道一个弹出菜单是否以经关闭 升级后问题,奇怪,请指教? 什么是存储过程? 大侠们帮忙看看,简单问题 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169. 请问怎样才能在Access中选取指定行数的记录如第5-10条. 关于XML命名空间的疑问?请教各位高手帮帮忙!谢谢! 请问哪里有《情深深雨蒙蒙》下载??? ******斑竹快出来啊 看看我这个贴子啊!!!!!!!!!!!!!! 如何读取寄存器中的数据? 请问在数据库中如何操作日期型字段: Help,如何把本机加入主域服务器? 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169 怎么用vbscript定义一个函数阿。我想作一个下拉框的onchange事件,请指教 如何确定adoquery的数据是否被修改了? 有关程序调试的问题 全都转行卖大白菜。 对于各个.h和.cpp文件分工如何,我的各种函数各个变量到底该放在哪个文件中的哪个class中? 如何停止asp调用的dll文件,我调用my_dll.dll文件一次之后就不能对my_dll.dll更改了,为什么?怎样解决? 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169.. 关于附件下载过程中权限控制的问题 如何编辑LILO文件? 糊涂啦。。。看看汉字库(hzk24)吧? 请问在listbox控件中如何设置特定行的颜色? 问一个关于ODBC的问题 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169.... 各位大侠,哪有设计专家系统的c语言的源代码阿(全分奉送)? 请问:如何处理MFC提供的CList类模板产生的异常问题呢? 散分!快抢! 调用对象 阿呆,只有你能救我了~~!!!!! 100大洋~~!!! Excel报表的汇总 请问VC有像Delphi或者C++Builder那样的作报表的工具吗? delphi怎么调用CHM文件啊? win98 登陆win nt Java远程调用的合法类型(legal types for Java RMI)都有哪些? 安装盘的制作问题 如何设置多个Timer? VFP的程序怎么才能运行在任何目录下?主程序应该怎么写? 这个问题很老套,但对于一个什么想成为一个优秀程序员的菜鸟来说,很重要,谢谢!进入........... 一个平行四边形,面积是九分之八平方米,高二米,这个平行四边形的底是多少米 等腰三角形面积怎么求 水平面上有一个物体受水平方向力的作用由静止开始无摩擦的运动,经过位移s1,速度达到v又经过位移s速度达到2v,则两段位移中该力所做功之比是多少? 告诉我大量关于三角形面积公式继续,不管常用不常用若有推到过程加分(除海伦公式,内切圆) 已知三角形ABC的面积是2008平方厘米,是平行四边形DEFC的四倍.求阴影部分的面积下面的图还没有收到答案 在水平面上有一个质量为M的物体,在水平力作用下由静止开始运动一段距离后,到达一斜面底端.这时撤去外力.物体冲上斜面,沿斜面上滑的最大距离和水平面上运动的距离相等,然后物体又沿斜 求助一个关于汽车发动机排量与缸数的问题打个比方一个5.0升的v10发动机5.0升直列1缸发动机,其他因素都一样,说说在使用中的不同,5.0升直列1缸发动机又没有可能启动不起来 运送液体的车,液体最上方的中间有气泡,当车开动时,气泡向哪运动,刹车时气泡向哪运动 一个三角形和一个平行四边形的面积相等,底也相等,如果三角形的高是10米,那么平行四边形的高是()米,如果平行四边形的高是10米,那么三角形的高是()米. 汽车发动机说的冲缸是啥意思~!~!谢谢修车高手~! 如图所示,一个装水的玻璃管中有一个气泡,当玻璃管突然向左运动时,气泡会向()运动,这是因为()具有惯性 要比例 如何判断是否冲缸垫 已知三角形三边求面积的公式是? 气泡水可以自己做么? 用椭圆公式求三角形面积?点P是椭圆x^2/4+y^2/3=1上的一点,F1、F2是它的左右焦点,若角PF1F2=120度,求三角形PF1F2的面积 知道三角形三边怎样求面积?用什么公式? 小孩子吹的泡泡水怎样做? 一块梯形玻璃,它的面积是80平方分米,如果下底是9分米,上底是多少?2/1没学 一个平行四边形的面积是128平方分米,底是高的2倍,底是多少分米,高是多少分米? 一个三角形与一个平行四边形的面积和底都相等,平行四边形的高是4厘米,三角形的高是多少厘米? 运输液体货物的槽车,液体中有一气泡,如图所示,当车向左加速运动时,气泡相对于槽车向—运动. 写出一个一次函数的表达式,使其图像与两坐标轴围成的3角形面积等于3 泡泡枪的泡泡水怎么做?要求:做法简单,并且可以使用放心,对宝宝无害? 运输液体的槽车,液体上有气泡,当车开动时,气泡将怎么运动;刹车时,气泡将怎么运动,其原因是什么? 已知一次函数的图象经过点(2,2),它与两坐标轴所围成的三角形的面积等于1,求这个一次函数的表达式 玩具泡泡枪里的泡泡水怎么配 运送液体货物的槽车,液体上方有气泡,如图所示.当车向右开动时,气泡将向___运动答案是向右,但是我认为,气泡有惯性,运动状态瞬间保持不变,不跟着车向右移动,所以我觉得是向左.气泡也有惯 已知一次函数的图像经过(2.2),它与坐标轴的三角形面积等于1,则这个一次函数表达式是 将面积是72平方厘米的长方形框架拉成一个平行四边形后,面积减少9平方厘米.已知将一个面积是72平方厘米的长方形框架拉成一个平行四边形,面积减少了9平方厘米,已知长方形框架的长时9 运输液体货物的槽车,液体上有个气泡,当车突然开动时,气泡为什么向前运动? 一次函数Y=-2X+b的图像与两坐标轴所围成的三角形的面积等于4,求此一次函数表达式 把一个长9厘米,宽6厘米的长方形框架拉成一个平行四边形,这时面积减少了10平方厘米,求平行四边形的面积 运输液体的槽车,液体上有气泡,当车开动时,气泡向前运动,为什么? 汽车有几种刹车,我就知道气刹和油刹.还有气刹和油刹原理? 如何自做泡泡水 一块平行四边形的玻璃,底为28厘米,高是底2倍.这块玻璃面积是多少平方厘米? 汽车刹车分为机械刹车 油刹车 气刹车 电子刹车 请问现在哪些分别运用了这些系统? 自制泡泡水过程作文怎么写 有一块平行四边形的茶色玻璃,它的底长是15.6分米,高是10分米,这块玻璃的面积是多少?如果每平方米玻璃的价钱是0.50元,买这块玻璃要多少钱? 1.一个平行四边形的高为5.6平方分米,若底不变,高增加1.7平方分米,面积就增加23.8平方分米,那么原面积?A.78.4 B.33.32 C.7.225(直接说答案)2.小明计算除法,把除数54写成45,得到商10,余数36,正确商 如何自制吹泡泡水?小孩子玩的吹泡泡的玩具,用一个圆圈形的工具沾上泡泡水一吹,就能吹出好多泡泡, 一块平行四边形玻璃,面积是20平方米,底是高的5倍,这块玻璃的底对应的高是多少? 一个平行四边形面积是4点5平方分米底5分米高多少分米. 自制泡泡水怎么弄?怎么记得小时候肥皂水就可以了呢 一块平行四边形的玻璃,底长4cm,高比底短8分之1.这块玻璃的高是多少?面积是多少脑袋坏掉纯属随便乱发 一个平行四边形,若底不变,高减少3分米,面积就减少9平方分米.若高不变,底增加3分米,面积则增加15平方不能列方程 吹泡泡的水怎么自制 直角三角形的面积公式怎么计?左边的是7分米,右边有一条斜边的是9分米,底下的是4.8分米,怎么算,这个9用不用算? 下面图中的两个平行四边形的高相等,其中阴影部分的面积是4平方分米,底是2.平行四边形的高是4分米,图形的总面积是多少? 把一个长为8厘米、宽为6厘米的长方形框架拉成一个平行四边形,这时面积减少了8平方厘米.求平行四边形的边为8厘米的边上的高是多少厘米? 直角三角形计算公式已知2条边和一个直角有办法求出另一条边么 汽车盘式刹车的刹车皮材料是什么?能再细致点吗? 1.把一个长为8厘米、宽为6厘米的长方形框架拉成一个平行四边形,这时面积减少了8平方厘米.求平行四边形边求平行四边形边长为8厘米的边上的高是多少厘米? 运输液体货物的车,如果车厢中有一气泡,当车启动时,气泡为什么向前运动 汽车刹车盘和刹车皮那个贵我的车是老款九几年的现代索纳塔今天去换俩前轮刹车皮和刹车盘 修配厂出的配件价格是刹车皮原厂240元 副厂120元 刹车盘说是原厂但是没说价钱开始我要的都是 把一个长为8厘米,宽为6厘米的长方形框架拉成一个平行四边形,这时面积减少了8平方厘米.求平行四边形做边长为8厘米的边上高是多少厘米? 一张平行四边形材质的第一场八分之三米地势高的八分之五,这张平行四边形彩纸的面积是多少平方米? 等腰三角形的面积公式 只知腰长已知腰长为20厘米,求面积,求得出来吗 物体原来静止在水平地面上,在水平向东、大小不变的力作用下,物体做匀加速运动,经过一段位移到A点时速度为V.此时作用力方向不变、大小立即增大为原来的3倍,又经过同样大小的一段位移
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn