Sailing catamaran
The vessel profile's outline for a sailing catamaran, and the vessels it draws.
On this page
Code
import { SAILING_CATAMARAN, VesselProfile, type VesselOutline } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The sailing catamaran outline as traced at 13.41 m, dimensioned in meters read from the points marked on it.";
const outline: VesselOutline = SAILING_CATAMARAN;
/** Drawing units to the meter: the length overall, from the transom to the bow's tip, is the reference length. */
const perMeter: number = (outline.hooks.bowTip - outline.hooks.transom) / outline.referenceLength;
/** A distance on the drawing, in meters. */
function meters(units: number): string {
return `${(units / perMeter).toFixed(2)} m`;
}
export default function Drawn(): ReactElement {
const { hooks }: VesselOutline = outline;
return (
<VesselProfile
outline={outline}
dimensions={{
lengthOverall: meters(hooks.bowTip - hooks.transom),
waterlineLength: meters(hooks.waterlineForward - hooks.waterlineAft),
draft: meters(hooks.keelFoot - hooks.waterline),
freeboard: meters(hooks.waterline - hooks.deckAtBow),
}}
/>
);
}
The sailing catamaran outline is traced from YACHT magazine's side elevation of the Fountaine Pajot Elba 45, a cruising catamaran of 13.41 m: one hull seen from the side with its two hull windows, the saloon on the bridgedeck with its glazing, the flybridge's hardtop reaching aft over the open cockpit on its post, the swim steps at the stern, and below the water the canoe body, the low keel, the rudder and the drive. The rig, the rails, the davits, the flybridge's cushions and the flag are left out. A shorter waterline comes off both ends equally.
The outline is traced at 13.41 m and listed in VESSEL_OUTLINES as sailing-catamaran; the kit exports it as
SAILING_CATAMARAN. Every catamaran in the vessel catalog, 41 models, takes this outline; the power catamarans take
it too, without a rig to leave out. Given a vessel's proportions, the vessel
profile stretches it to her length overall, waterline length, freeboard and draft; a
particular not given follows the length overall in the outline's proportion.
Examples
Vessels from this outline
Code
import { SAILING_CATAMARAN, VesselProfile } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";
export const description: string =
"The Lagoon 40, Leopard 46 and Bali 5.4, each drawn from the sailing catamaran outline at her own particulars and" +
" to one scale.";
interface Vessel {
/** The vessel, as the catalog names her. */
readonly name: string;
/** Length overall, meters. */
readonly loa: number;
/** Length at the waterline, meters, where the catalog has it. */
readonly lwl?: number;
/** Draft, meters. */
readonly draft: number;
/** Freeboard at the bow, meters, where the catalog has it. */
readonly freeboard?: number;
}
/** Particulars from the vessel catalog. */
const VESSELS: readonly Vessel[] = [
{ name: "Lagoon 40", loa: 11.74, lwl: 11.73, draft: 1.35 },
{ name: "Leopard 46", loa: 13.9, lwl: 13.42, draft: 1.65 },
{ name: "Bali 5.4", loa: 16.8, lwl: 16.2, draft: 1.48 },
];
export default function Vessels(): ReactElement {
return (
<div style={{ display: "grid", gap: "var(--space-md)" }}>
{VESSELS.map(
({ name, loa, lwl, draft, freeboard }: Vessel): ReactElement => (
<figure key={name} style={{ margin: 0 }}>
<VesselProfile
outline={SAILING_CATAMARAN}
proportions={{ lengthOverall: loa, waterlineLength: lwl, draft, freeboard }}
frameLength={16.8}
dimensions={{
lengthOverall: `${loa.toFixed(2)} m`,
waterlineLength: lwl === undefined ? undefined : `${lwl.toFixed(2)} m`,
draft: `${draft.toFixed(2)} m`,
}}
/>
<figcaption style={{ marginTop: "var(--space-xs)", color: "var(--text-dim)", fontSize: "0.85em" }}>
{name}
</figcaption>
</figure>
),
)}
</div>
);
}
Related
- Vessel profile: the component, its props, and the outline for each hull shape.