2007年6月15日 星期五

機動學 作業十三

作業十三 b94611042 王志豪 (Due date: 12pm June 16,2007)

我的blog

題目:
1.試設計一組複式齒輪,使其轉速比為125(請說明思考步驟及結果)。

2.請指出本學期中你自己最感得意的一次作業(請說明其原因,且該作業必須在自己的部落格內)。

12.1
==>試設計一組複式齒輪,使其轉速比為125(請說明思考步驟及結果)。
Ans:

由題目可知,我們欲求之轉速比為125。
首先,從講義或是課本中,可知道轉速比之公式:





轉速比公式
註:算出來答案的正負號代表著平面第一個齒輪和最後一個齒輪轉的方向,其中,正為相同,負為相反。

至於普通串聯齒輪的轉速比,其推導則為:













普通串聯齒輪轉速比推導

然而,題目所要求的為複式齒輪,因為有共軸齒輪,故須修正!













修正版公式推導
註:當中打「'」者為共軸齒輪之第二個齒輪。

欲求得最終轉速比......
是利用主動輪和驅動輪透過中間許多組齒列......
將各組減速比相乘而得。

按題目要求,轉速比要為1:125(若為放大)。
由於任兩齒輪間之轉速比以不超過10為原則,考慮:

125^(1/2)=11.18
125^(1/3)=5

由於125開平方後得到約11.18......
意即需兩組轉速比為11.18齒列作組合,不和我們的要求。
故此設計不適合僅用兩組齒列。
而將125開三次方後則是得到5這個答案,比10小。
符合要求下,因此我們可以設計三組轉速比為5的齒列來組合。

也就是使用組合串聯三組!
可使用1:5的齒輪組串連三次,就可得到125的轉速比。

整個組合的齒數順序為12:60;12:60;12:60
轉速比為(60/12)*(60/12)*(60/12)= 125
誤差值為0 %

12.2
==>請指出本學期中你自己最感得意的一次作業(請說明其原因,且該作業必須在自己的部落格內)。
Ans:

這個嘛......其實這些作業裡面,我並不會有哪一次特別得意耶。說句實在話,每一次的作業,學到的東西都很多,我個人其實不是那種非常厲害可以瞬間就舉一反三的那種人物,每一次的作業我時常都問題一大堆,得叼擾同學們,不斷請教對方,這才逐漸能一步步地將作業打造成型,完成每一週的任務。在此我非常感謝那些曾經幫我解惑過的同學們。在一次次的作業中成長,真的學到了不少東西。

當然,如果真的真的要嚴格講起來最得意的作品,應該是作業八之後的作品吧。在此之前,不少地方一直抓不住要領,以作業八為分隔線,終於比較能切中要點,在各方面的資料彙整以及程式方面也完善很多。唯一比較缺憾的是,作業十個人費了不少心思做了許多的動畫,然而由於第一版的解釋不夠完善,以致於造成教授在批覽時的困惑,在此感到十分抱歉。其他的,我個人都還蠻滿意的啦,雖然花了很多時間,但我有一些外系的朋友看過後都覺得蠻不錯的,覺得很神奇(雖然他們說看不懂程式.....),辛苦的成績被肯定,還是挺高興的。

大致就是這樣吧,機動學在此告一段落,他會是我大學生涯中一段值得回首的記憶。

2007年6月8日 星期五

機動學 作業十二

作業十二 b94611042 王志豪 (Due date: 12pm June 6,2007)
我5/31日曾全程來上課

我的blog

題目:
1. 請聲明5/31日曾全程來上課。
2. 一組標準全齒輪齒輪之徑節為8(亦可使用自設值),齒數分別為30T與48T,其工作壓力角為20度(可為14.5或25度,自選)。

* 試求其接觸線長度,與接觸比。
* 兩齒輪之節圓、基圓直徑各為如何?請列式計算其結果。
* 此組齒輪是否會產生干涉現象?試列式證明之。
* 可否利用draw_gear.m繪出其接合情形,並繪出其動畫效果。

12.1
我5/31日曾全程來上課



12.2
==>一組標準全齒輪齒輪之徑節為8(亦可使用自設值),齒數分別為30T與48T,其工作壓力角為20度(可為14.5或25度,自選)。

* 試求其接觸線長度,與接觸比。
* 兩齒輪之節圓、基圓直徑各為如何?請列式計算其結果。
* 此組齒輪是否會產生干涉現象?試列式證明之。
* 可否利用draw_gear.m繪出其接合情形,並繪出其動畫效果。
Ans:

1.
假設齒輪徑節為8,齒數為30T跟48T,工作壓力角為20度.
此時,我們可以利用教學網站上的一個function來解決這個問題.
也就是function [c_ratio, c_length, ad, pc, pb, d2, d3, ag] = contact_ratio(pd, n2,n3, phi)

其中輸入的參數分別如下:
Pd:徑節
n2, n3:兩齒輪之齒數
phi:壓力角

輸出參數:
cr_ratio:接觸比
cr_length:接觸長度
ad:齒冠
pc, pb:周節及基周節
d2, d3:兩齒輪節圓直徑。
ag:兩齒輪之接近角、遠退角及作用角

************************************
function [c_ratio,c_length,ad,pc,pb,d2,d3,ag]=contact_ratio(pd,n2,n3, phi)
%
%Find the contact ratios
% Inputs:
% Pd: Diametrial pitch;
% n2,n4:number of both gears;
% phi: pressure angle, degrees
% Outputs:
% c_ratio, c_length: contact ratio and length
% ad:addendium
%   pc,pb: circular and basic circular pitches
%   r2, r3: radii of pitch circles
%  ag: angles of action, in matrix of
% [alpha2 beta2 theta2 alpha3 beta3 theta3]
% Example: [c_r,c_l,ad,pc,pb,d2,d3,ag]
% =contact_ratio(6,24,48,20)
% Revised: March 9, 2006
d2g=pi/180;
pangle=phi*d2g;
cosx=cos(pangle);sinx=sin(pangle);
ad=1./pd;pc=pi./pd;
pb=pc.*cosx;
r2=n2./(2*pd);r3=n3./(2*pd);d2=2*r2;d3=2*r3;
rb2=r2.*cosx;rb3=r3.*cosx;
ax=sqrt((r3+ad).^2-(r3.*cosx).^2)-r3.*sinx;
xb=sqrt((r2+ad).^2-(r2.*cosx).^2)-r2.*sinx;
c_length=ax+xb;
c_ratio=c_length./pb;
ag1=[ax./rb2 xb./rb2 c_length./rb2]/d2g;
ag2=[ax./rb3 xb./rb3 c_length./rb3]/d2g;
ag=[ag1;ag2];
**************************************

主程式
==>
function [c_ratio, c_length, ad, pc, pb, d2, d3, ag] =contact_ratio(8,30,48,20)

結果如下:

接觸比 =1.7005
接觸長度 =0.6275
齒冠 =0.1250
周節=0.3927
基周節=0.3690
齒輪一節圓直徑=3.7500
齒輪二節圓直徑=6
兩齒輪的接近角、遠退角及作用角
==>(1)10.4850 9.9211 20.4061
(2)6.5532 6.2007 12.7538

因此
==>
*接觸比:c_ratio = 1.7005
*接觸長度:c_length =0.6275

所謂接觸比,即同時有幾對齒相互嚙合,數值越大力量分散較平均,因此最好大於1,這樣比較可以避免有未嚙合的狀況,因此,這個狀況是符合的.

若欲手動計算,可用課本上的公式
==>
接觸比 mc = 接觸路徑長度/基周節




2.
節圓
==>
由公式: Pd=N/D (徑節=齒數/節圓直徑)

30T的齒輪節圓直徑: 8=30/D D=3.75 (cm)
48T的齒輪節圓直徑: 8=48/D D=6 (cm)

和第一小題用程式執行的結果一樣.

基圓
==>
利用課本的公式,將節圓直徑乘上工作壓力角的餘弦值即是答案:

30T的齒輪基圓直徑: 3.75*cos(20)=3.524 (cm)
48T的齒輪基圓直徑: 6*cos(20)=5.638 (cm)


3.
關於這個,可以分為接近角以及退遠角兩方面來討論.

接近角
==>
必須滿足MP>=AP
條件可以變成(N2^2+2*N2*N3)sin(壓力角)^2>=4+4*N3
是以N2=30,N3=48,壓力角=20度,代入.
(900+2880)*sin(20)^2=442.176 > 4+4*N3=196
結論,不會干涉.

退遠角
==>
必須滿足NP>=BP
條件可以變成(N3^2+2*N3*N2)sin(壓力角)^2>=4+4*N2
(2304+2880)sin(20)^2=606.41 > 4+4*N2=124
結論,不會干涉.

所以總結,不會產生干涉現象!

以下即為齒輪干涉的概念圖==>














另外,假如不想要每次那麼麻煩計算.
網路講義中有提供了一個程式可供使用判斷呦.
這個程式就是function [x]=isinterf(phi,N1,N2)

***********************************************
function [x]=isinterf(phi,N1,N2)
%
% Test if the gear set exists an interference
% phi:pressure angle, in degrees
% N1,N2:teeth of both gears
% x=0:no interference; x=1 interence exists
x=0;
sinx=sin(phi*pi/180);
if N2if N1*(N1+2*N2)*sinx*sinx<4*(1+N2), x=1;end
************************************************
phi為壓力角
N1為齒輪一齒數
N2為齒輪二齒數
x=1表示產生干涉
x=0表示不產生干涉

主程式
==>
function [x]=isinterf(20,30,48)

ans=0
所以是不產生干涉,與計算結果符合的!


4.
function [coords]=draw_gear(Dp,N,phi,range,x0,y0)

關於這個函式,它的基本參數定義如下:
Dp: 節矩
N: 齒數
phi: 壓力角
range: 繪出之部份
x0,y0: 齒輪中心座標

*************************************************
function [coords]=draw_gear(Dp,N,phi,range,x0,y0)
% [coords]=draw_gear(Dp,N,phi,range,x0,y0)
% To draw a whole gear
% Inputs:
% Dp: Diametrical pitch
% N: no of teeth in a gear
% phi: pressure angle, degrees
% range: the section range to be drawn
% x0,y0: the location of the gear center
% Example [coords]=draw_gear(10,15,20,360,0,0)
[coord,theta,rp,rb]=tooth(Dp,N,phi);
coords=[];i=0;
while i coord1=rotate2D(coord,-i,x0,y0);
coords=[coords;coord1];
i=i+theta;
end
plot(coords(:,1),coords(:,2));hold on;
[coord]=bushing(rp/8,x0,y0);
plot(coord(:,1),coord(:,2),'b-');
[coord]=bushing(-rp,x0,y0);
plot(coord(:,1),coord(:,2),'r:');
[coord]=bushing(-rb,x0,y0);
plot(coord(:,1),coord(:,2),'b:');
axis equal;
*************************************************

[coords]=draw_gear(8,48,20,360,9.75/2,0,12.7538)

圖形如下==>















由於我們的目標是期望它能繪出動畫效果.
而這個程式本身只是會製齒輪外型使其成為一齒輪組.
因此,勢必要加入變數theta,使其擁有轉動的動畫效果.
方式是將程式裡頭的while迴圈中......
把coord1=rotate2D(coord,-i,x0,y0)中的-i改成-i+theta2.
一開始可供輸入的變數則變為如下:

function [coords]=draw_gear(Dp,N,phi,range,x0,y0,theta2)

改造程式完成後,便可開始進行動畫繪製工作.
在此,利用第一小題程式求得的作用角~~
以及第二小題求得的節圓直徑.
將這兩變數代入程式後,多個for迴圈.
如此一來,便大功告成!

主程式
==>
for theta=0:0.5:24
clf
[coords]=draw_gear(8,30,20,360,0,0,20.4061+theta)
[coords]=draw_gear(8,48,20,360,9.75/2,0, 12.7538-theta*.625)
pause(0.2)
end
axis equal




後來在看講義的時候,發現有個好用的function
叫做move2_gear(Dpitch,nn1,nn2,phi,omega1)
做出來的效果很好......
因此,在此弄上這個漂亮許多的版本哩~~
(p.s.1上面那個自製似乎轉動速度慢了點...=.=)
(p.s.2 ctrl+C 是好物......good!)

***************************************************
function move2_gear(Dpitch,nn1,nn2,phi,omega1)
% move2_gear(Dpitch,nn1,nn2,phi,omega1)
% To draw a whole gear
% Inputs:
% Inputs:
% Dpitch:dimetral pitch
% nn1,nn2: no. of teeth for both gears
% phi:pressure angle, degrees
% omega1: angular velocity of gear 1
% Example move2_gear(10,15,20,20,10)
clf;
d2r=pi/180;delt=0.01;
[coord1,r1,rb1]=one_tooth(Dpitch,nn1,phi,360,0,0);
[coord2,r2,rb2]=one_tooth(Dpitch,nn2,phi,360,0,0);
st=180/nn2;if nn1+nn2>2*fix((nn1+nn2)/2),st=0;end
coord2=rotate2D(coord2,180+st,0,0);
xc1=coord1(:,1);yc1=coord1(:,2);
xc2=coord2(:,1);yc2=coord2(:,2);
height=max(r1,r2)*1.2;
ar=min(abs(r1),abs(r2));
coord=bushing(ar/5,0,0); % Get the coordinates of 1st bushing
xb1=coord(:,1)-r1;yb1=coord(:,2);
xb2=coord(:,1)+r2;yb2=coord(:,2);
coord=bushing(-r1,-r1,0);%Get the 1st pitch circle
xp1=coord(:,1);yp1=coord(:,2);
coord=bushing(-r2,r2,0);% Get the 2nd pitch circle
xp2=coord(:,1);yp2=coord(:,2);
plot(xb1,yb1,'r-');hold on;
plot(xb2,yb2,'k-');
plot(xp1,yp1,'r:');
plot(xp2,yp2,'k:');
plot([-r1,r2]',[0,0]','r:');
xx1=min([r1,r2])/2;phir=(90-phi)*d2r;
plot([0,0]',[-xx1*2,xx1*2]','b:');
plot([-xx1 xx1]',[-xx1*tan(phir), xx1*tan(phir)]','b:');

cir1=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
cir2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','k');
line1=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',2,'color','r');
line2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',2,'color','k');
lx1=[0 -r1]';ly1=[0,0]';
lx2=[r2,0]';ly2=[0,0]';
axis([-2.5*r1 2.5*r2 -height height]);
axis equal;
title('Press Ctl-C to stop');
theta1=180;theta2=180;s1=omega1*delt/d2r;
while 1,
z1=rotate2D([xc1,yc1],theta1,-r1,0);
z2=rotate2D([xc2,yc2],theta2,r2,0);
L1=rotate2D([lx1,ly1],theta1,-r1,0);
L2=rotate2D([lx2,ly2],theta2,r2,0);
set(cir1,'xdata',z1(:,1),'ydata',z1(:,2)); % For 1st circle moving
set(cir2,'xdata',z2(:,1),'ydata',z2(:,2)); % For 2nd circle moving
set(line1,'xdata',L1(:,1),'ydata',L1(:,2)); % For 1st line
set(line2,'xdata',L2(:,1),'ydata',L2(:,2)); % For 2nd line
drawnow;
pause(1/s1); %Stop for a while so we can see the graph
theta1=theta1+s1;
theta2=theta2-s1*r1/r2;
if theta1>360, theta1=theta1-360;end; %Reverse the direction at bondary line
if theta2>360,theta2=theta2-360;end;
end
******************************************
Dpitch:節矩
nn1,nn2:兩齒輪之齒數
phi:壓力角,degrees
omega1: 齒輪1之角速度,rad/s


主程式
==>
move2_gear(8,30,48,20,10)



2007年6月2日 星期六

機動學 作業十一

作業十一 b94611042 王志豪 (Due date: 12pm May 30, 2007)
我有上本週5/24的課

我的blog

題目:
1. 請聲明本週(5/24)有來上課。

2. 某凸輪開始時先在0-100∘區間滯留,然後提升後在200至260∘區間滯留,其高度(衝程)為5公分,其餘l由260∘至360∘則為返程。升程採用等加速度運動,返程之運動型式自定。設刻度區間為10∘,試繪出其高度、速度及加速度與凸輪迴轉角度間之關係。

3. 設凸輪之半徑為15公分,以順時針方向旋轉,其從動件為梢型,垂直接觸,長為10公分,從動件之運動係依照第二項之運動型式。試繪出此凸輪之工作曲線。

4. 你能讓此凸輪迴轉嗎?

11.1
我有上本週5/24的課



11.2
==>某凸輪開始時先在0-100∘區間滯留,然後提升後在200至260∘區間滯留,其高度(衝程)為5公分,其餘l由260∘至360∘則為返程。升程採用等加速度運動,返程之運動型式自定。設刻度區間為10∘,試繪出其高度、速度及加速度與凸輪迴轉角度間之關係。
Ans:

關於這題,基本上,我們可以有兩種作法.

分別是可以利用講義中的function [y, yy, yyy]=parabol_cam(phi, phi_in, beta_range, direct, travel,rpm),或者,使用另外一個程式function plot_dwell(ctheta,s,pattern,range),這兩個程式同樣都可以解決這個問題.

關於parabol_cam的程式碼,我就不多詳述了.(貼上blog的時候,似乎系統對裡面一些字有意見,認為語法有問題,所以就不再貼上,詳細可見於講義中.),由於都是做差不多的事情,為了避免在分析時造成混淆,個人決定不採用parabol_cam,而是使用更加方便的plot_dwell來幫忙解決這個問題.

*******************************************************************************
function plot_dwell(ctheta,s,pattern,range)
%ctheta = cam angle (deg)--can be a matrix
%pattern = denote the type of motion used(a 3 element-row matrix)
% 1:uniform 2:parabolic 3:simple harmonic 4: cycloidal
% 5:polynomial motion
% example [4 3]
%range =the degrees the specific motion starts
% Output: y is for displacement, yy is the derivative of the displacement with
% respect to theta, and yyy the second derivative with respect % to theta.
% Example plot_dwell(0:10:360,2,[4 3],[90 180 240]);
figure(1);clf;
[y,yy,yyy]=dwell(ctheta,range,pattern)
h1=plot(ctheta,y*s,'b-',ctheta,yy*s,'k-',ctheta,yyy*s,'r-')
legend('Displacement','Velocity','Acceleration',3)
xlabel('Elapsed Angle, degrees')
grid
*********************************************************************************

關於這個function plot_dwell,我簡單說明一下:

ctheta:代表我們打算繪製哪個角度範圍內的圖形.
s:衝程.
pattern:代表升程以及返程時的運動方式.
range:代表的是升程是從哪個角度開始還有結束,以及返程是從哪裡開始.

有了這些條件,我們便可以開始行動解決問題了!!!

從題目所給的條件看來
第一項表示的是角度,故選擇0-360度之區間做圖,輸入0:10:360
第二項則是動件衝程:題目設定為5cm,所以輸入5
第三項表示形式,由於為等加速度運動,故寫入2
第四項表示運動始末的角度,故前兩項各為100.200,返程始於260度,因此第三項為360

而關於模式方面,由於返程運動模式自訂,故會分成五種狀況:
1:等速運動uniform
2:抛物線parabolic
3:簡諧simple harmonic
4:擺線cycloidal 
5:多項式polynomial motion

主程式1(返程等速度運動)
==>
plot_dwell(0:10:360,5,[2 1],[100 200 260])















等速度返程的運動情況


主程式2(返程等加速度運動,也就是拋物線!)
==>
plot_dwell(0:10:360,5,[2 2],[100 200 260])















等加速度返程的運動情況


主程式3(返程簡諧運動)
==>
plot_dwell(0:10:360,5,[2 3],[100 200 260])















簡諧運動返程的運動情況



主程式4(返程擺線運動)
==>
plot_dwell(0:10:360,5,[2 4],[100 200 260])















擺線運動返程的運動情況


主程式5(返程多項式運動)
==>
plot_dwell(0:10:360,5,[2 5],[100 200 260])















多項式運動返程的運動情況



11.3
==>設凸輪之半徑為15公分,以順時針方向旋轉,其從動件為梢型,垂直接觸,長為10公分,從動件之運動係依照第二項之運動型式。試繪出此凸輪之工作曲線。
Ans:

由於題目說的是梢形元件,所以我們可以直接套用講義上的一個function [x,y]=pincam(cth,r0,s,e,L,range,pattern,cw),利用這個function來幫助我們解決問題.

******************************************************************
function [x,y]=pincam(cth,r0,s,e,L,range,pattern,cw)
%Find the pin type cam with an offsect e
%Inputs:
% cth:angle of cam, degrees
% r0:radius of base circle
% e:offset
% s:stroke
% L:length of pin
% cw:rotation direction of cam(-counterclockwise,+clockwise
%pattern = denote the type of motion used(a 3 element-row matrix)
% 1:uniform 2:parabolic 3:simple harmonic 4: cycloidal
% 5:polynomial motion
% example [4 3]
%range =the degrees the specific motion starts, eg.[90 180 240]
% Example: [x y]=pincam([10 60],5,2,1,10,[90 180 240],[4 3],-1)
figure(1);
clf;
th=cth*pi/180;
s0=sqrt(r0*r0-e*e);
for i=1:length(cth)
t=th(i)*cw;
A=[cos(t) -sin(t);sin(t) cos(t)];
[ym,yy,yyy]=dwell(cth(i),range,pattern);
x0=s0+ym*s;
Sx=[0 x0 x0+L;e e e];
X=A\Sx;
x(i)=X(1,2);y(i)=X(2,2);
line(X(1,1:2),X(2,1:2));
line(X(1,2:3),X(2,2:3),'linewidth',3,'color','red')
end
hold on;
plot([0 x],[0 y],'ro',x,y,'k-')
axis equal
********************************************************************


關於這個function pincam,我簡單說明一下:
cth:凸輪角度,度數
r0:凸輪基圓半徑
e:偏置量
s:從動件衝程
L:從動件長度
cw:凸輪轉動方向(反時鐘為正,順時鐘為負)
pattern=運動的型式,二元素之列矩陣.
range=升程及返程之範圍,三元素列矩陣

從題目所給的條件看來
第一項表示角度,選擇0-360度之區間做圖,故輸入0:10:360
第二項則是表示突輪基圓半徑,題目為15cm,所以寫入15
第三項表示從動件衝程,題目設為5cm,因此寫5
第四項乃偏置量,因為題目沒有要求,所以設為0
第五項是從動件長度,題目為10cm,故輸入10
第六項表示運動始末的角度,故前兩項各為100.200,返程始於260度,故第三項為360
第七項為形式,因為皆為等加速度運動,所以選擇2
第八項表示凸輪轉動方向,題目所求為順時針,所以很明顯是-1

故主程式
==>
[x y]=pincam([0:10:360],15,5,0,10,[100 200 260],[2 2],-1);
















11.4
==>你能讓此凸輪迴轉嗎?
Ans:

在此我們用到11.3的function pincam,把這個程式作修改即可.
首先對裡頭一開始的凸輪繪製保留.
然後原先line出圖形的地方,刪除,以利於動畫的執行.
最後,把裡面在多加入一個旋轉迴圈,使這個凸輪迴轉就大功告成了!

改造後的新function
==>
function [x,y]=pincam2(cth,r0,s,e,L,range,pattern,cw)
%Inputs:
%cth:凸輪的角度
%r0:基圓半徑
%e:偏置量
%s:衝程
%L:梢長
%cw:順時或逆時
%range:運動範圍
figure(1);
%先叫出空白圖
pause(2);
%停兩秒,以利準備拍攝的程式
clf;
th=cth*pi/180;
s0=sqrt(r0*r0-e*e);
oo=37;
for nn=1:10:360 mm=nn*pi/180;
oo=oo-1;
clf;
axis([-30 30 -30 30])
for i=1:length(cth)t=th(i)*cw;A=[cos(t+mm) -sin(t+mm);sin(t+mm) cos(t+mm)];
[ym,yy,yyy]=dwell(cth(i),range,pattern);
x0=s0+ym*s;
Sx=[0 x0 x0+L;e e e];
X=A\Sx;x(i)=X(1,2);
y(i)=X(2,2);
end[yw,yww,ywww]=dwell(cth,range,pattern);
y1=yw*s+r0+L;
y2=yw*s+r0 ;
line([0 0],[y1(oo),y2(oo)],'linewidth',10,'color','blue');
line([0 30],[y1(oo),20],'linewidth',10,'color','red');
axis([-30 30 -30 30])
hold on;
plot([0 x],[0 y],'ro',x,y,'k-')
pause(0.03);
end


主程式
==>
[x y]=pincam2([0:10:360],15,5,0,10,[100 200 260],[2 1],-1)