Repository: ManimCommunity/manim

Issue:
Arrow tip not animating correctly in GrowArrow animation
## Description of bug / unexpected behavior
When displaying a simple ```GrowArrow()``` animation, the arrow tip does not animate correctly. At the beginning of the animation the tip is added to the screen at full scale facing to the left (no matter what direction it faces by the end of the animation). It then animates by shrinking and growing again to full scale by the end of the animation whilst rotating so that it points to the correct direction by the end of the animation also.

## Expected behavior
The arrow should begin small and grow to its full size whilst pointing in the intended direction throughout the entirety of the animation (so that the line and tip appear as one entity).

## How to reproduce the issue
```python
class GrowArrowTest(Scene):
    def construct(self):
        arrow = Arrow(LEFT, RIGHT)
        self.play(GrowArrow(arrow))
```


## Additional media files
<details><summary>Unexpected Behaviour</summary>

![GrowArrowUnexpected](https://user-images.githubusercontent.com/78569519/106969798-af185300-679f-11eb-8123-bcf6d77d71a6.gif)

</details>

<details><summary>Expected Behaviour (Rendered with Grants version of Manim)</summary>

![GrowArrowExpected](https://user-images.githubusercontent.com/78569519/106966757-0f0bfb00-679a-11eb-887e-95bae44b4a24.gif)

</details>

## System specifications

<details><summary>System Details</summary>

- OS: macOS 11.1 (Big Sur)
- RAM: 16 GB
- Python version: 3.9.0
- Installed modules:
```
Package           Version
----------------- -------
colorama          0.4.4
colour            0.1.5
commonmark        0.9.1
decorator         4.4.2
manim             0.3.0
manimpango        0.2.0
networkx          2.5
numpy             1.19.5
Pillow            8.1.0
pip               21.0.1
progressbar       2.5
pycairo           1.20.0
pydub             0.24.1
Pygments          2.7.4
rich              6.2.0
scipy             1.6.0
setuptools        49.2.1
tqdm              4.56.0
typing-extensions 3.7.4.3
```
</details>

<details><summary>FFMPEG</summary>
ffmpeg version 4.3.1
</details>


Discussion:
It broke in #366
> It broke in #366

Possibly because of https://github.com/ManimCommunity/manim/pull/366/files#diff-b0ce9f0e97010be3f81191f949e3321debc323226bd70ca3bbbbf66dfe4a3ffeL653-L665 -- would have to think about it. (But I also don't really see what else could have broken it.)
> Possibly because of 

Its still not wroking after replacing that part with old code
Edit: You are right, *never rely on cache.. never*
I wouldn't want to include the old code again, however (it was very complicated for what it did). There is an easier way to fix this: `GrowArrow` should implement `create_starting_mobject` itself; something like

```py
    def create_starting_mobject(self) -> "Mobject":
        start = self.mobject.copy()
        start.scale(0, scale_tips=True)
        start.move_to(self.point)
        if self.point_color:
            start.set_color(self.point_color)
        return start
```

fixes the problem. (Which basically is that the default `Arrow.scale` method does not scale the arrow tips.)

Resolving patch:
diff --git a/manim/animation/growing.py b/manim/animation/growing.py
--- a/manim/animation/growing.py
+++ b/manim/animation/growing.py
@@ -57,6 +57,13 @@ def __init__(self, arrow: "Arrow", **kwargs) -> None:
         point = arrow.get_start()
         super().__init__(arrow, point, **kwargs)
 
+    def create_starting_mobject(self) -> "Mobject":
+        start_arrow = self.mobject.copy()
+        start_arrow.scale(0, scale_tips=True, about_point=self.point)
+        if self.point_color:
+            start_arrow.set_color(self.point_color)
+        return start_arrow
+
 
 class SpinInFromNothing(GrowFromCenter):
     def __init__(self, mobject: "Mobject", path_arc: float = PI, **kwargs) -> None:
diff --git a/manim/mobject/geometry.py b/manim/mobject/geometry.py
--- a/manim/mobject/geometry.py
+++ b/manim/mobject/geometry.py
@@ -856,6 +856,7 @@ def scale(self, factor, scale_tips=False, **kwargs):
 
         if scale_tips:
             VMobject.scale(self, factor, **kwargs)
+            self.set_stroke_width_from_length()
             return self
 
         has_tip = self.has_tip()


Test patch: