It's not as mysterious as "things work better that way" or anything.
The primary duty of a constructor is to make sure that an object is in a valid state before any methods are called. That's the answer to your question on top. Without a constructor, the methods of an object have no way to know whether fields have meaningful values.
Java has two ways to initialize objects, other than running a constructor, but those always run even before the constructor is called, so the same principle applies. Initialization happens before any method calls. (Yes, you can violate this on purpose by calling methods in the constructor before all critical fields have been set. A good IDE or compiler might warn you about that.)
The same principle applies with inheritance. The private fields defined in the superclass must be initialized before any superclass methods are called. The super() constructor call makes sure that the inherited part of the object is valid, so that inherited methods may be called.
The super() statement looks like a function call, but it's really more of a declaration. What it does is allow arguments to be passed to the the superclass constructor. If you don't provide a super() statement, one (with no arguments) is generated for you.
Back to your problem: If you can use "setter" methods to set the vertex coordinates, then you can use those instead of super() arguments to get the information into the base class fields.
If the base class is immutable (meaning you can't change the contents after creation...String objects are immutable, for example) then you have a problem. One solution is to use factory methods. That's a static method that *returns* a reference to a newly created object. That method can do as much computation as needed to get the vertex coordinates and then use new Trapezoid(vertexA, vertexB, ...) to construct a new Trapezoid object, given all values needed for the Quadrilateral superclass constructor call, plus values for any extra fields you have for the Trapezoid (like precomputed base and height.)
The user then calls Trapezoid.create(...arguments...) instead of new Trapezoid(...arguments...), which is almost as easy to type and gets the same thing done.