If you have seen the Popup Book tutorial for Cinema 4D by Robert Leger and want to know how to solve the problem in the mathematical way read below.

Here is the Robert’s tutorial:

This is my result obtained with my solution:

I know that the following symbolism is not simple to read because I chose one that is ready to be transferred to COFFEE code and simple to write in this blog.

First of all, I want to fix my axes to take advantage of symmetry.

The origin is fixed on the point O. When the book is closing the two pages rotate together alpha degrees. I choose alpha as variable for the animation.

Now I want to have free choose of points: A and B.

The point A’ is symmetric respect to the ZY-plane by point A.

The point B stays on the plane x=0.

Now, with the book opened (alpha=0), I set the point A and B that I call _A and _B. In this manner I have set the distances OA,OB,AB that must be the same at any angle.

Generalizing a point P is defined through its variables as P (x, z, y) so:

A(alpha=0)=_A=(X_A, Z_A, 0)

B(alpha=0)=_B=(0, Z_B, Y_B)

It is obvious that Y_A=X_B=0

Then X_A, Z_A, Z_B, Y_B are all set.

I’m searching a solution for points A and B:

A=A(alpha)=(XA,,ZA,YA)=(X_A*cos(alpha), Z_A, X_A*sin(alpha))

A is solved. Note that XA^2+YA^2=X_A^2

B=(0, ZB, YB)

Now I’m searching a solution for B.

The equations:

1) The point B describes an arc of a circle with radius R equal to length OB.

ZB^2+YB^2=R^2 (note that also R^2=Z_B^2+Y_B^2)

2) The distance AB= constant

at any alpha:

AB^2=(XA-XB)^2+(ZA-ZB)^2+(YA-YB)^2

at alpha=0:

AB^2=(X_A-X_B)^2+(Z_A-Z_B)^2+(Y_A-Y_B)^2

=>

(remember that Y_A=X_B=0)

XA^2+(Z_A-ZB)^2+(YA-YB)^2=X_A^2+(Z_A-Z_B)^2+Y_B^2

XA^2+Z_A^2-2*Z_A*ZB+ZB^2+YA^2-2*YA*YB+YB^2=X_A^2+Z_A^2-2*Z_A*Z_B+Z_B^2+Y_B^2

after some steps, I found:

YA*YB+Z_A*ZB=Z_A*Z_B

For YA=0 (that is the same condition alpha=0) we have ZB=Z_B that is the correct value.

When alpha is fixed (YA fixed) this is an equation of a line (r). For YA>0:

YB=(Z_A*Z_B-Z_A*ZB)/YA

The intersection of the two equations gives two solutions. I”ll choose the solution with YB>0.

Now let’s go on with the calculations.

For semplicity: K=Z_A*Z_B

Intersect of:

1) YA*YB+Z_A*ZB=K => ZB=(K-YA*YB)/Z_A

2) ZB^2+YB^2=R^2

Raplacing ZB of equation 1) in equation 2):

(K-YA*YB)/Z_A+YB^2=R^2 =>

(YA^2+Z_A^2)*YB^2-2*K*YA*YB+(K^2-R^2*Z_A^2)=0 quadratic equation

The positive solution is:

YB=[K*YA+Z_A*sqrt(YA^2*R^2+Z_A^2*R^2-K^2)]/(YA^2+Z_A^2)

Now I can Calculate ZB:

ZB=(K-YA*YB)/Z_A

The problem is solved!

Now I can write a COFFEE node for the algorithm:

main()

{

var Z_B,Y_B,X_A,Z_A,Z_B2,Y_B2,Z_A2,YA2,alpha,K,K2,R2;

X_A=Input1;

Z_A=Input2;

Z_B=Input3;

Y_B=Input4;

alpha=Input5;

Z_A2=Z_A*Z_A;

Z_B2=Z_B*Z_B;

Y_B2=Y_B*Y_B;

YA=X_A*sin(alpha);

YA2=YA*YA;

XA=X_A*cos(alpha);

R2=Z_B2+Y_B2;

K=Z_A*Z_B;

K2=K*K;

YB=(K*YA+Z_A*sqrt(YA2*R2+Z_A2*R2-K2))/(YA2+Z_A2);

ZB=(K-YA*YB)/Z_A;

}

I hope this tutorial can be useful also just like a mathematic exercise.

TraceyHi Giannni, I think you might have melted my brain but thank you. This has come at just the right time for a project I am working on, but I need to turn on to the next page which also needs to be a popup, is there a way of duplicating the pages and then driving the close with the opening of the new page. Forgive me I am still finding my way with all this. Any help or advice would be gratefully received. thank you T ;)

Gianni LorussoPost authorHi Tracey,

I’m glad for your words.

I think that all is possible… but it also true that sometimes we don’t see the way, impossible to see. :-D

However I think that I can add an Xpresso slider for right page control. I’m going to manage the project file in the next 1-2 days. At that point I think that add a few pairs of pages is possible and also driving the close with the next opening.

Pingback: Behind Dog Chow Ad | N11

Gianni LorussoPost authorThanks for mentioning my work that solves the problem in analytical way.

I’m glad you find this helpful for your work.

JanHi there, nice stuff! May I just ask you for reuploading the file? The link doesn’t work. Thank you in advance.

Gianni LorussoPost authorThank you Jan,

I’ll do it as soon as I can.

Gianni

SergeHi. Can you reupload the file..?

The problem is that hotfile.com closed because of illegal content.

Thanks.

Gianni LorussoPost authorYes, I know.

For now I’m sending the file to everyone that asks me.

Stay tuned for the file in your mailbox. ;)

Bye

SergeOk. Got it. Thank you. ;)

Gianni LorussoPost authorPerfect! :)

BrunoThe link the file is broken!

Gianni LorussoPost authorHi Bruno,

I know that, l need to modify the article.

In any case, as I said above I’m sending the file to everyone that asks me.

I ‘ll send you a file to your email address if you want. :)

mknobelsdorfhi can you send the file to me too?

Gianni LorussoPost authorSure! ;)

Damian AtkinsonHey Can I have the file also. Thanks

Gianni LorussoPost authorSure! ;)

Daniel LibrelonHello friend!

Excellent their work, perfect pop up! Exactly what I’ve been trying to make some time! You can send me this file in C4D? Sincerely, Daniel Librelon. danlibrelon@yahoo.com.br

Thanks in advance!

Olá amigo!

Excelente seu trabalho, pop up perfeito! Exatamente o que eu venho tentando fazer a algum tempo! Você pode me enviar esse arquivo em c4d? Atenciosamente, Daniel Librelon. danlibrelon@yahoo.com.br

Desde já agradeço!

Gianni LorussoPost authorThank you Daniel,

I’ll send you the file in two minutes.

Daniel LibrelonOk Thanks!

Daniel LibrelonFriend! Thank you, I needed to understand how the movements of a pop up works, just seeing even understand! You helped me more! Thanks a lot!

Daniel Librelon.

Amigo! Muito obrigado, eu precisava entender como funciona os movimentos de um pop up, só vendo mesmo para entender! Você me ajudou de mais! Obrigado mesmo!

Daniel Librelon.

Gianni LorussoPost authorYou are welcome Daniel.

Cheers,

Gianni

arrecife1101thanks for this amazing work gianni ..could u share the file with me??thanks in advance!!!

Gianni LorussoPost authorThanks!

Ok, I will.